流水线 - 在两个程序之间发送字符串

时间:2013-04-17 16:08:51

标签: c pipe

我一直在阅读有关流水线操作的内容,并阅读了此主题 - How to send a simple string between two programs using pipes?

我读了@jschmier的答案(第一个) - 我想知道它是如何实际工作的? 程序writer.c和reader.c必须同时运行吗?如果他们这样做,reader.c如何“通知”writer.c已发送字符串?

这些问题是理论上的,但我真的很想知道流水线是如何工作的。 感谢adnvnace。

1 个答案:

答案 0 :(得分:1)

Do the programs writer.c and reader.c have to run simultaneously ?

他们这样做。

If they does , how reader.c is "informed" that writer.c has sent a string?

这两个程序都会打开一个特殊的pipe设备:"/tmp/myfifo。一个用于阅读,另一个用于写作。内核负责在它们之间传输数据。

请注意,管道实际上需要并发读写,因为内部缓冲区非常小,没有一个活动会阻塞另一个。

工作原理:如果要简化,写入到管道的数据会从进程空间进入内核并进入 reader 进程。通常开发人员尝试使用非阻塞调用,因为阻止程序执行以防一个进程繁忙是不可接受的。

有关管道的更多信息,您可以阅读有关该主题的Linux文档:http://linux.die.net/man/7/pipe