C-write()未写入文件
我的问题很简单,当我尝试确认函数是否写在文件上时,没有显示任何内容,文件在那里,但文件中没有任何内容,应该是我想要的字符串的1024倍C-write()未写入文件,c,file,C,File,我的问题很简单,当我尝试确认函数是否写在文件上时,没有显示任何内容,文件在那里,但文件中没有任何内容,应该是我想要的字符串的1024倍 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
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 ;
int-escreve1x(const-char*path,const-char*cadeia)
int fd=开放(路径,O|u创建,S|u IWUSR | S|u IXUSR | S|u IWGRP | S|u IXGRP | S|u IWOTH | S|IXOTH | S|IXOTH);
int i;
printf(“%s\n”,cadeia);
对于(i=0;i1),添加“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;
int fd=open(路径,O|u CREAT | O|RDWR,S|u IWUSR | S|uixusr | S|uiwgrp | S|uixgrp | S|uiwoth | S|IWOTH | S|IXOTH);
如果(fd)cadeia
的内容是什么?您的文件流在哪里?fd
的值是什么?您可能应该将O_WRONLY | O_create
传递到open
:”。我认为O_RDWR
这对于读取和写入来说已经足够了。那么为什么所有模式?您必须检查错误:fd=open(…);if(fd<0){peror(path);exit(1);}
您的意思肯定是如果(状态<0)
?您还应该检查打开的返回值。如果文件小于一个磁盘块(通常为4096字节),除非关闭(fd),否则文件长度将为零;在写入完成后调用。即使文件大于磁盘块,在没有刷新(fd)或关闭(fd)的情况下,也不会写入最后一个要写入的块;没有关闭(fd)会导致资源泄漏。