c - read() from pipeline 保证在 EOF 之前提供所有原子写入的数据?

标签 c linux pipe fork

我使用一个简单的 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/

相关文章:

c# - 如何设置 ffmpeg 管道输出?

c - 一个进程中的两个阻塞操作

java - c-Java : UnsatisfiedLinkError on natie method call

c - 在C程序中发送ICMP数据包

linux - Expect 脚本 - 发送字符串所需的引号与 expect 所需的引号冲突

c - 在Linux中的父子进程中使用Pipe

c - 如何优化重复添加

linux - Curl 下载 ASCII 格式的 tar.gz 文件

c - 查找在 epoll 实例中注册了哪些描述符

python - 检索 subprocess.call() 的输出