2017-04-10 86 views
0

我包括<error.h>为什么'EINTR'未申报?

#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; 
} 
+0

您已晓得'error'是一个函数? – Olaf

+0

一般来说,请不要在代码中包含行号 - 这会导致难以复制和编译。如果在编号错误消息中包含行号,最好指出代码中的哪一行属于哪个错误,但这里没有错误消息。 –

+1

对不起,我写'error == EINTR',应该是'errorno == EINTR' – Wonter

回答

7

您缺少EINTR因为<error.h>没有任何关系<errno.h>,这是在EINTR声明的声明。错误变量是errno,而不是error