write(fd,buf,count)返回0时应该怎么办?

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

假设count> 0:

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

有什么情况可以做到这一点?

除非你明确地write了一个零长度,否则这绝不会发生在一个正确的,符合POSIX的系统上。 如果你想要支持各种不为人知的遗留的私有协议,你可能需要调查每个协议发生了什么,以及返回值是否出现在EINTR位置,或者是否代替EWOULDBLOCK或其他错误。 ..

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

请注意,根据POSIX:

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

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

你的问题已经被询问和讨论。 :)希望这个页面帮助。

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

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

根据write页面,你应该检查errno