2014-10-04 141 views
0

我的問題很簡單,當我試圖確認如果函數寫在文件上,什麼都沒有顯示出來,文件在那裏,但文件裏面沒有什麼,應該是1024乘以我想要的字符串。C寫()不寫入文件

int escreve1x(const char* path , const char* cadeia) 

int fd = open(path, O_CREAT, S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IWGRP | S_IXGRP | S_IROTH | S_IWOTH | S_IXOTH); 
int i; 

printf("%s\n", cadeia); 

for (i=0 ; i<=1024 ; i++) 
{ 
    write(fd, cadeia, 10); 
} 

return 0 ; 
+1

'cadeia'的內容是什麼? – 2014-10-04 17:36:25

+0

你的文件流在哪裏? – Rustam 2014-10-04 17:44:13

+0

'fd'的價值是什麼?你應該通過'O_WRONLY | O_CREAT'到'open':「[參數標誌必須包含以下訪問模式之一:O_RDONLY,O_WRONLY或O_RDWR。(http://man7.org/linux/man-pages/man2/open.2。 HTML)」。 – 2014-10-04 17:45:28

回答

0

1-添加「O_RDWR」標誌使fd可寫。 2 - 始終調試寫入系統調用的結果;

int fd = open(path, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IWGRP | S_IXGRP | S_IROTH | S_IWOTH | S_IXOTH); 
if(fd<0) { 
printf("Open failed\n"); 
return 1; 
} 
int i; 
printf("%s\n", cadeia); 
for (i=0 ; i<=1024 ; i++) { 
int status=write(fd, cadeia, 10); 
if(status<0) { 
printf("Write failed"); 
} 
} 
return 0; 

如果說寫入失敗,那麼檢查errno。

+1

當然,您的意思是'if(status <0)'?你還應該檢查'open'的返回值。 – 2014-10-04 17:51:06

+1

文件長度(如果文件小於一個磁盤塊(通常爲4096字節))將爲零,除非關閉(fd);在寫作完成後調用。即使文件大於磁盤塊,最後寫入的塊也不會在沒有flush(fd)的情況下寫入。或關閉(fd);沒有關閉(fd)會導致資源泄漏。 – user3629249 2014-10-05 07:23:00