linux,write()系统调用在尝试写入文件时返回-1

Ete*_*ner 1 c linux

在下面的程序中,write()在写入文件时返回-1.

   #include<sys/types.h>
   #include<sys/stat.h> 
   #include<fcntl.h>   
   #include<stdio.h>   
   #include<unistd.h> 
   #include<stdlib.h>
   int main() {

   int fd_r=0,fd_w=0;
   int w_ret=100;
   fd_r = open("reader.txt", O_RDONLY);

   fd_w = open("writer.txt",O_CREAT,S_IRWXU);

   char *buf = (char *)malloc(50);

   while(read(fd_r,buf,30))
   {

          w_ret =   write(fd_w,buf,30);
          printf("%d", w_ret);
   }
}
Run Code Online (Sandbox Code Playgroud)

问题:我无法调试为什么会发生这种情况.关于如何调试此类问题的代码和建议的更正非常受欢迎

use*_*379 5

我不认为这O_CREAT对于旗帜本身是有效的:试试O_CREAT | O_WRONLY.

调试的一种方法是在第一次打开时检查fd_w文件描述符是否有效.

"参数标志是O_RDONLY,O_WRONLY或O_RDWR之一,它们分别以零或多个以下方式按位或按顺序打开文件只读,只写或读/写..." http:/ /www.linuxmanpages.com/man2/open.2.php

  • 如果未指定任何读/写标志,则假定为"O_RDONLY",因为其值为"0". (2认同)