我有一个程序创建了许多输入命名管道,我必须为这些管道使用 poll() 来监视这些管道并在其中写入某些内容时获取已写入其中的信息.我对轮询非常陌生,我找不到很多示例可以清楚地说明如何对多个文件描述符使用轮询。
下面是我写的代码:
char buffer [1024];
size_t count = 0;
ssize_t = bytes;
while(1)
{
int n = poll(pollFd, number_of_pipes, 3000);
if(n != 0)
{
if (n == -1)
{
perror("poll");
exit(1);
}
for(j = 0; j < number_of_pipes; j++)
{
if(pollFd[j].revents & POLLIN)
{
//read the written pipe
if((bytes = read(fd[j], buffer, sizeof(buffer))) > 0)
count += (size_t) bytes;
}
}
}
}
但是,我不确定这是否是在使用 poll() 时处理多个输入管道的正确方法;因为我也不确定如何知道 read 函数何时到达文件末尾。
最佳答案
代码看起来不错,如果不完整(您没有显示如何设置 pollFd
和 fd
数组)。它确实忽略了实际读取的数据,只计算总量;对于一个真正的程序,您可能想对数据做一些事情。
一些评论
如果将其更改为从
pollFd[j].fd
而不是fd[j]
读取,则不需要多余的fd
array -- 描述符必须都在pollFd
array您不检查 EOF 或读取错误——如果读取返回 0 或 -1,您应该从
pollFd
数组中删除该条目并减少number_of_pipes
.
关于c - 处理多个文件描述符时如何使用 poll()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24922069/