写(fd,buf,count)返回0时我该怎么办?

时间:2011-04-13 22:51:04

标签: c linux unix

  

可能重复:
  Is a return value of 0 from write(2) in C an error?

假设计数> 0:

ret = write(fd, buf, count);  
if(ret == 0) {  
    // Should I try to write again
    // or treat this as error?
}

是否存在可能出现这种情况的情况?

4 个答案:

答案 0 :(得分:10)

除非您明确地将长度为零传递给write,否则在正确的POSIX符合系统上永远不会发生这种情况。如果你想支持各种模糊的遗留专有统一,你可能需要调查每一个上发生的事情,以及零的返回值是否代替EINTR或代替{{ 1}}或其他一些错误...

2011年,我个人认为它不会发生。还有很多其他事情会在试图支持这样破旧的旧垃圾时更加糟糕。

注意,按POSIX:

  

如果write()在写入任何数据之前被信号中断,它将返回-1并将errno设置为[EINTR]。

http://pubs.opengroup.org/onlinepubs/9699919799/functions/write.html

答案 1 :(得分:0)

您的问题已经被提出并进行了讨论。 :)希望this页帮助。

答案 2 :(得分:0)

写入系统调用的结果是该系统调用写入的总字节数。在所有错误情况下,它将返回-1。因此,如果函数返回0,则我们处于未定义状态(基于通用文档)。我会寻找任何平台特定的原因返回0并根据该研究的结果处理它。如果您没有特定原因,我会退出。您在系统调用中遇到未定义的行为,这可能不太好。

手册页:http://linux.die.net/man/2/write

答案 3 :(得分:-1)

根据writeman页,您应该检查errno