poll返回0但读取不阻止

时间:2015-09-18 05:30:12

标签: c++ c polling

我一直在处理这段代码,由于某种原因,即使有来自outFds管道的数据,poll也会返回零。出于某种原因,如果我读入一些数据然后运行poll它会返回正确的值,但这不是一个解决方案。有没有人见过这个,知道我应该做什么?

#include <stdio.h>
#include <stdlib.h>
#include <sys/poll.h>

int main(void)
{
    int outFds[2];

    pipe(outFds);

    if(!fork()) {
        dup2(outFds[1], 1);

        close(outFds[0]);
        close(outFds[1]);

        // disable printf buffering
        setvbuf(stdout, NULL, _IONBF, 0);

        sleep(1);
        char buf[32];
        printf("blah");

        exit(0);
    }

    close(outFds[1]);

    char c;
    // Read 'b' into c. If this next line is not commented poll returns 1
    //read(outFds[0], &c, 1); 

    struct pollfd outFd;
    outFd.fd = outFds[0];
    outFd.events = POLLIN;
    printf("%d\n", poll(&outFd, 1, 0)); // poll returns 0 for some reason
}

1 个答案:

答案 0 :(得分:0)

从联系手册:

  

指定超时为零会导致poll()立即返回   如果没有准备好文件描述符。

我会将此读作timepec结构,其中tv_sectv_nsec设置为0,但似乎放入nullptr具有相同的效果。