我发现了很多关于 Linux 上管道的问题和答案,但几乎都讨论了读者方面的问题。
对于一旦数据可用并且读取进程连接就准备好将数据传递到命名管道的进程,有没有办法以非阻塞方式:
- 等待 (poll(2)) 让读者打开管道,
- 在循环中等待(再次轮询(2))以获取写入管道不会阻塞的信号,并且
- 当收到这样的信号时,检查有多少字节可以写入管道而不阻塞
我了解如何做 (2.),但我无法为 (1.) 和 (3.) 找到一致的答案。
编辑:我正在寻找(类似于)FIONWRITE 用于管道,但 Linux 没有 FIONWRITE(用于管道)(?)
EDIT2:作者的预期主循环(一种伪代码,目标语言是 C/C++):
forever
poll(can_read_command, can_write_to_the_fifo)
if (can_read_command) {
read and parse command
update internal status
continue
}
if (can_write_to_the_fifo) {
length = min(data_available, space_for_nonblocking_write)
write(output_fifo, buffer, length)
update internal status
continue
}