【问题标题】:Why is 'EINTR' undeclared? [closed]为什么未声明“EINTR”? [关闭]
【发布时间】:2017-04-10 02:54:50
【问题描述】:

我加入了<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;
}

【问题讨论】:

  • 你知道error是一个函数吗?
  • 一般情况下,请不要在代码中包含行号——这会使复制和编译变得困难。如果您在行号中包含编译器错误消息,最好指出代码中的哪一行属于哪个错误,但是您在此处没有收到错误消息。
  • 对不起,我写的是error == EINTR,应该是'errorno == EINTR'
  • @Wonter Er,我很确定应该是errno

标签: c unix io


【解决方案1】:

您缺少EINTR 的声明,因为&lt;error.h&gt;&lt;errno.h&gt; 没有关系,EINTR 是在其中声明的。并且错误变量是errno 而不是error

【讨论】:

    猜你喜欢
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 2020-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多