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

标签 c pipe

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

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

这些问题大多是理论性的,但我真的很想知道流水线是如何工作的。 谢谢你的提醒。

最佳答案

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?

两个程序都打开一个特殊的管道设备:"/tmp/myfifo。一个打开用于读取,另一个用于写入。内核负责在它们之间传输数据.

请注意,管道实际上需要并发读取和写入,因为内部缓冲区非常小,并且在没有一个事件的情况下会阻塞另一个事件。

它是如何工作的:如果为了简化,数据写入管道从进程空间进入内核并进入阅读器进程。通常开发人员尝试使用非阻塞调用,因为在一个进程繁忙的情况下阻塞程序执行是 Not Acceptable 。

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

关于c - 流水线 - 在两个程序之间发送字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16065014/

相关文章:

C、指针、控制台在输入数据后消失

将字符串中的日期转换为 C 中的日期更改格式

linux - 管道 `find` 到 'tail`

java - FFMpeg 在从 Java 应用程序发送原始像素数据时以错误的帧速率进行压缩

c# - 从安全的角度来看,在 Windows 中使用管道是否被认为是危险的?

C- 在很长的系列中找到数字的最佳技巧是什么

关于数组的 C 编程语言示例

c++ - linux上的gcc使用哪个线程库来实现OpenMP?

c - 为什么我的第二个子进程在第一个子进程之前受到攻击?

c - popen 在进程之间传递二进制数据