我想使用名为fifo的通道,我想在写入这个fifo时实现超时。
fd = open(pipe, O_WRONLY);
write(fd, msg, len);
程序被打开的功能阻止,因此使用功能选择将不起作用。 感谢。
答案 0 :(得分:1)
您可以在致电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()
及其超时参数。