2014-10-04 142 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