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

Mar*_*rek 6 c unix linux

可能重复:
C中写入(2)的返回值为0是否为错误?

假设count> 0:

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

是否有可能出现这种情况?

R..*_*R.. 10

除非你明确地传递了零长度write,否则永远不会发生在正确的POSIX符合系统上.如果你想支持各种晦涩难懂的遗留专有统一,你可能需要调查每一个上发生的事情,以及零的返回值是代替EINTR或代替EWOULDBLOCK或出现其他错误......

就个人而言,2011年我会假设它没有发生.还有很多其他的东西会破坏更糟糕的尝试支持这样破旧的旧垃圾..

注意,按POSIX:

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

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