如何在打开/写入功能中实现超时

时间:2014-09-14 19:07:52

标签: c linux pipe fifo

我想使用名为fifo的通道,我想在写入这个fifo时实现超时。

fd = open(pipe, O_WRONLY);
write(fd, msg, len);

程序被打开的功能阻止,因此使用功能选择将不起作用。 感谢。

2 个答案:

答案 0 :(得分:1)

阅读pipe(7)fifo(7)poll(2)

您可以在致电time(7)之前使用信号处理程序(请参阅signal(7)& open(2))设置计时器或闹钟 - 但我不会这样做 - 或者您可以使用O_NONBLOCK标记,因为fifo(7)说:

 A process can open a FIFO in nonblocking mode.  In this case, opening
for read-only will succeed even if no-one has opened on the write
side yet, opening for write-only will fail with ENXIO (no such device
or address) unless the other end has already been opened.

但是,在FIFO或管道的另一端需要一些东西(其他一些过程读数)。

也许您应该考虑使用unix(7)套接字,即AF_UNIX地址系列。它看起来与您的情况更相关:将上面的代码(尝试打开以编写FIFO)更改为客户端上的AF_UNIX套接字(使用连接),并将其他进程更改为AF_UNIX套接字服务器。

5gon12eder所述,您也可以查看inotify(7)。甚至可能是D-bus

我猜测在您的情况下,FIFO或管道不是正确的解决方案。您应该解释更多,并更全面地了解您的关注点和目标。

答案 1 :(得分:0)

使用select()及其超时参数。