我使用一个简单的 fork()
父子示例来让子级生成一些数据,并为父级使用 write()
生成数据。子进程将原子地将少于 64kib(65536 字节)的数据写入管道。
父进程从管道中读取数据,当它收到EOF
(即:假设远程端已关闭)时,它会继续进行一些处理逻辑并在自己方便的时候关闭,并且不关心 child 需要多长时间才能终止。
父级是否保证能够读取在遇到 EOF
之前发送的所有客户端数据,或者是否会启动任何潜在的操作系统级逻辑来触发 EOF
早在所有数据被读取之前?
I have found a very similar question on SO, but it didn't receive an authoritative/cited answer.
谢谢。
最佳答案
是的,家长将能够读取所有数据。为了让您放心,请在 shell 中尝试以下操作:
echo test | (sleep 1; cat)
echo命令立即执行;管道的另一侧将等待一秒钟,然后尝试从中读取。这确实有效。
只要父进程继续循环读取,子进程也可以毫无问题地写入超过 64 kiB,尽管这样就不再是原子的了。
关于c - read() from pipeline 保证在 EOF 之前提供所有原子写入的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39821303/