c - 成功写入不会在文件上写入任何内容

标签 c linux file unix system-calls

<分区>

首先,如果这是一个愚蠢的问题(当然是),我很抱歉,但我对在 Unix 中使用 Syscall 真的很陌生。 我试图使用“写”在文件上写一些东西;它正确地创建了文件,但是上面没有写任何东西,那是代码:

int main(void) {
   int fd;
   char *string = "Test";
   if(fd=open("home/user/test.txt", O_WRONLY | O_APPEND | O_CREAT)==-1){
    perror("Open failed");

   }
   printf("%d\n", strlen(string));
   printf("Wrote %d byte on the file", write(fd,string,strlen(string)));
   close(fd);
   return 0;
}

我的问题在哪里? 谢谢

最佳答案

问题似乎出在这一行:

fd=open("home/user/test.txt", O_WRONLY | O_APPEND | O_CREAT)==-1

相等比较运算符 == 具有更高的优先级,因此首先对其求值。因此,您不是将文件描述符编号分配给 fd,而是将比较结果分配给 fd

修复此问题很简单,因为您可以将比较之前的部分括在括号 () 中。

关于c - 成功写入不会在文件上写入任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11065697/

相关文章:

mysql - 错误 : ENOENT: no such file or directory, 打开 'D :\nodejs\loginnew\views\layouts\layout. Handlebars 这个错误是我发现的

c++ 为什么 .ignore() 函数不能正常工作?

c - 如何使用 autotools 设置项目,以便生成的可执行文件可以看到所需的二进制文件?

c - C 中的指针和数组

javascript - 如何将从客户端浏览器抓取的数据保存到用户文件中?使用 Electron ?

c - select 只检查 fds 直到 255 直到 FD_SETSIZE

linux - 按分钟聚合文件中的行

c - 从索引 1 到字符串末尾的子字符串

c - 从引导脚本启动时,程序无法终止 () 进程

linux - 从 perl 网络服务器访问用户文件