在系统调用的手册页中写(2) -
ssize_t write(int fd, const void *buf, size_t count);
它说如下:
回报价值
成功时,返回写入的字节数(零表示没有写入).出错时,返回-1,并
errno进行适当设置.如果count为零且文件描述符引用常规文件,则可能返回0,或者可以检测到错误.对于特殊文件,结果不可移植.
我会将此解释为意味着返回0只意味着没有任何内容被写入,无论出于何种原因.
但是,当处理作为TCP套接字的文件描述符时,UNP中的Stevens将返回值0视为致命错误(这由另一个调用exit(1)短计数的函数包装):
ssize_t /* Write "n" bytes to a descriptor. */
writen(int fd, const void *vptr, size_t n)
{
size_t nleft;
ssize_t nwritten;
const char *ptr;
ptr = vptr;
nleft = n;
while (nleft > 0) {
if ( (nwritten = write(fd, ptr, nleft)) <= 0) {
if (nwritten < 0 && errno == EINTR)
nwritten = 0; /* and …Run Code Online (Sandbox Code Playgroud)