C 使用epoll等待读卡器连接到命名管道

C 使用epoll等待读卡器连接到命名管道,c,linux,operating-system,pipe,epoll,C,Linux,Operating System,Pipe,Epoll,我正在编写一个应用程序,其中我正在创建许多(FIFO管道),我需要等待进程打开其中一个命名管道,以便向其发送数据。然而,我很难弄清楚如何在这个用例中使用epoll 我尝试使用O|RDWR | O|u NONBLOCK标志打开命名管道(使用O|WRONLY | O|u NONBLOCK返回一个ENXIO错误),然后使用epoll轮询epolout事件。但是,由于某些原因,在我打开命名管道后,它们会立即写入,因此epoll\u wait会立即返回,而无需等待读卡器连接 如何使用epoll同时等待读卡

我正在编写一个应用程序,其中我正在创建许多(FIFO管道),我需要等待进程打开其中一个命名管道,以便向其发送数据。然而,我很难弄清楚如何在这个用例中使用
epoll

我尝试使用
O|RDWR | O|u NONBLOCK
标志打开命名管道(使用
O|WRONLY | O|u NONBLOCK
返回一个
ENXIO
错误),然后使用
epoll
轮询
epolout
事件。但是,由于某些原因,在我打开命名管道后,它们会立即写入,因此
epoll\u wait
会立即返回,而无需等待读卡器连接


如何使用
epoll
同时等待读卡器连接到多个命名管道?

如果FIFO打开进行读写,它可以立即写入,也可以让读卡器在不阻塞的情况下读取。打开文件描述符后,是否可以删除
O\u NONBLOCK
标志?我想不是。您只能为已经打开的文件描述符调用
epoll()
,因此很可能无法使用它来监视何时打开FIFO进行读取。您可以使用多个线程(每个管道一个线程)来尝试打开FIFO,并让主线程知道何时有新线程供其监视。或者是一些模糊的东西。我没有充分考虑过这个实现。J.Onnay-Leffffl我考虑了一个线程一管的方法,但是因为我可以有大量的管道,这会耗尽OS线程,这就是我现在考虑使用
epoll
的原因。我不确定是否有一种合理的方法可以等待许多未打开的FIFO中的任何一个成为可打开的,因为另一端有一个读写器。我不知道有一个,但我不知道所有的Linux系统调用——它们有很多。