2017-04-10 16 views
0

Iは<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

あなたは「エラー」は機能であると認識していますか? – Olaf

+0

一般に、コードに行番号を含めないでください。コピーやコンパイルが難しくなります。行番号の付いたコンパイラエラーメッセージを含めると、コード内のどの行がどのエラーに属しているかを示すことができますが、ここにエラーメッセージがありません。 –

+1

申し訳ありません、私は 'error == EINTR'と書くべきです、 'errorno == EINTR'でなければなりません。 – Wonter

答えて

7

<error.h>EINTRが宣言されているところである、<errno.h>とは関係ありませんので、あなたはEINTRの宣言を逃しています。また、エラー変数はerrnoであり、errorではありません。

関連する問題