我想使用命名管道通道,并在写入此管道时实现超时。
fd = open(pipe, O_WRONLY);
write(fd, msg, len);
程序被函数open阻塞,因此使用函数select将无法工作。 谢谢。
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或管道的另一端有其他进程进行读取。AF_UNIX
地址族。它看起来更符合你的情况:将上面的代码(尝试打开一个写入FIFO)改为客户端端的AF_UNIX套接字(使用connect),并将另一个进程更改为AF_UNIX套接字服务器。使用 select()
函数及其超时参数。
O_NONBLOCK
不起作用吗? - 5gon12ederinotify
+select
可以确定 FIFO 是否准备就绪,然后进行悲观的open()
并设置O_NONBLOCK
,可能会奏效。 - 5gon12eder