2017-04-10 90 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