例如,我有一个脚本,用于将时间写入 /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字节。