我一直在处理这段代码,由于某种原因,即使有来自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
}
答案 0 :(得分:0)
从联系手册:
指定超时为零会导致poll()立即返回 如果没有准备好文件描述符。
我会将此读作timepec结构,其中tv_sec
和tv_nsec
设置为0
,但似乎放入nullptr
具有相同的效果。