相关疑难解决方法(0)

C中写入(2)的返回值是0是错误吗?

在系统调用的手册页中写(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)

c linux posix tcp

13
推荐指数
2
解决办法
8404
查看次数

标签 统计

c ×1

linux ×1

posix ×1

tcp ×1