可能重复:
写入(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
。