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

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

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

相反,如果我的循环每 10 分钟只写入一次时间,那一天后我还能访问所有内容吗?

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

答案1

进程将能够向管道中写入PIPE_BUF字节(参见linux/limits.h)。然后它将被卡住,直到读取一些数据。

只要管道至少有一端处于打开状态,缓冲数据就会保留下来 - 不存在“超时”或类似情况。但是,缓冲区会保留在内存中,并且不会在重启后保留。

查看pipe(7)手册页,特别是“管道容量”部分,以获取更多信息。

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

[...] 自Linux 2.6.11起,管道容量为65536字节。

相关内容