假设计数> 0:
ret = write(fd, buf, count);
if(ret == 0) {
// Should I try to write again
// or treat this as error?
}
是否存在可能出现这种情况的情况?
答案 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并根据该研究的结果处理它。如果您没有特定原因,我会退出。您在系统调用中遇到未定义的行为,这可能不太好。
答案 3 :(得分:-1)
根据write
的man
页,您应该检查errno
。