我发现poll()函数对于管道和套接字的多路复用非常有用,但是我想扩展它并轮询我自己的介质,就像实现我自己的管道一样,让它适用于POLLIN和POLLOUT事件的poll,如何我会这样做吗?
int self = GenerateMyPipe();
int sock = socket(...);
struct pollfd fd[2];
//Init Pollfd and Stuff...
poll(fd, 2, -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”的值而不会阻塞。
您可以通过写入描述符来更改计数器。