【发布时间】:2016-09-11 20:55:51
【问题描述】:
(没有信号量或线程,只有进程)
我想从父文件中读取数据并通过管道将其传递给子文件。 假设文件中的数据是
Is
This
Possible?
现在通过管道阅读“Is”之后
- 孩子怎么会知道新数据“
This”已经通过并且应该被读取 - 通过管道读取“
Possible?”后的终止条件是什么,以便孩子在读取父要传递的所有数据后终止
(不使用信号量或线程,只是简单的进程,即分叉)
提前致谢
【问题讨论】:
-
C 还是 C++?它们是不同的语言。请选择一个。
-
@mindriot 有些问题同样适用于两种语言,这是其中之一。它询问管道 I/O,两种情况下的答案都非常相似。
-
EOF不适合您? -
当没有数据可供输入时,管道的读取端会阻塞。当最后一个进程关闭管道的写端时,管道的读端指示 EOF。唯一棘手的一点是,如果您请求读取 256 个字节并且三个短行可用,则将同时读取所有三个。另一方面,如果你有两个管道,一个从子到父,一个从父到子,那么你可以创建同步半双工通信并避免这个问题——尽管你得到了一些其他的(但他们可能没有对你很重要)。
-
也许您应该发布您的分叉、管道创建和 I/O 代码。如果管道定义正确,您应该不会遇到这些问题。如果您正在使用
fork和pipe(2),则将文件描述符用于管道的正确“侧”可能会很棘手,特别是如果您需要两个管道[一个用于向子节点发送数据,第二个用于获取数据返回]