FIFO(命名管道)保持“打开”状态多久?

n0p*_*0pe 5 linux unix pipe named-pipe fifo

例如,我有一个脚本将时间写入 /etc/pipe 中的管道。它在 while true 循环中连续写入。管道中的数据可以读取多长时间?如果我只决定在一天后使用 cat /etc/pipe 读取管道,我是否会从我开始写入时获得所有时间值?

相反,如果我的循环每 10 分钟只写一次时间会怎样。一天后我可以访问所有内容吗?

最后,假设我的循环连续写入时间(就像我的第一个示例一样),并且我每 30 分钟读取一次管道。如果我的计算机在我读取管道之前关闭,当我重新启动时管道是空的还是会保存所有数据?

Šim*_*óth 7

该进程将能够将PIPE_BUF字节(请参阅linux/limits.h)写入管道。然后就会卡住,直到读取到一些数据。

只要管道的至少一端打开,缓冲的数据就会保留下来——没有“超时”或类似的东西。然而,缓冲区保存在内存中,不会持续重启。

有关pipe(7)更多信息,请参阅手册页,尤其是“管道容量”部分。

管道的容量有限。如果管道已满,则 awrite(2)将阻塞或失败,具体取决于是否设置了 O_NONBLOCK 标志(见下文)。

[...] 从 Linux 2.6.11 开始,管道容量为 65536 字节。