为poll函数创建描述符

时间:2017-06-02 22:35:38

标签: c multithreading pipe

我发现poll()函数对于管道和套接字的多路复用非常有用,但是我想扩展它并轮询我自己的介质,就像实现我自己的管道一样,让它适用于POLLIN和POLLOUT事件的poll,如何我会这样做吗?

int self = GenerateMyPipe();
int sock = socket(...);
struct pollfd fd[2];
//Init Pollfd and Stuff...
poll(fd, 2, -1); 
...

感谢阅读...

1 个答案:

答案 0 :(得分:0)

没有标准的POSIX方法,但在Linux上你可以使用eventfd()

  

eventfd()创建一个可用作事件的“eventfd对象”          用户空间应用程序和内核的等待/通知机制          通知用户空间应用程序的事件。该对象包含一个          由#维护的无符号64位整数(uint64_t)计数器          核心。此计数器使用中指定的值初始化          参数initval。
  ...
  返回的文件描述符支持poll(2)(类似地                 epoll(7))和select(2),如下所示:

     
      
  • 文件描述符是可读的(select(2) readfds    参数;如果计数器有一个,则poll(2) POLLIN标志    值大于0.

  •   
  • 文件描述符是可写的(select(2) writefds    参数;如果可能的话poll(2) POLLOUT标志    写入一个至少为“1”的值而不会阻塞。

  •   

您可以通过写入描述符来更改计数器。