为什么'EINTR'未申报?

Won*_*ter 0 c unix io

我列入<error.h>.

#include <error.h>
#include <unistd.h>

ssize_t rio_readn(int fd, void *buf, size_t n)
{
    size_t nleft = n;
    char *rbuf = buf;
    while(nleft > 0)
    {
        int nread = read(fd, rbuf, nleft);
        if(nread < 0)
        {
            if(error == EINTR)
                nread = 0;
            else
                return -1;
        }
        else if(nread == 0)
            break;
        nleft -= nread;
        rbuf += nread;
    }
    return n - nleft;
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*ler 8

你错过了声明EINTR因为与声明<error.h>无关<errno.h>,EINTR声明在哪里.并且错误变量也是,errno而不是error.