C语言 处理多个文件描述符时如何使用poll()



我有一个程序,它创建了许多输入命名管道,我必须使用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函数已到达文件的末尾。

代码看起来不错,如果不完整(您没有显示如何设置pollFdfd数组)。它忽略了实际读取的数据,只计算总数;对于一个真正的程序,您可能想对数据做一些事情。

几个注释

  • 如果您将其更改为从pollFd[j].fd而不是fd[j]读取,则不需要冗余的fd数组—描述符必须全部在pollFd数组中

  • 你不检查读取时的EOF或错误——如果读取返回0或-1,你应该从pollFd数组中删除该条目并减少number_of_pipes

相关内容

  • 没有找到相关文章

最新更新