2017-06-02 58 views
0

我發現poll()函數對多路複用管道和套接字非常有用,但是我想擴展它並輪詢我自己的介質,就像在實現我自己的管道中一樣,並且使用poll對於POLLIN和POLLOUT事件,我該怎麼做?爲輪詢函數做一個描述符

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

感謝您的閱讀...

+0

您使用的是Linux嗎?參見[eventfd()](http://man7.org/linux/man-pages/man2/eventfd.2.html) – Barmar

回答

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」的值而沒有阻塞。

您通過寫描述符改變計數器。