linux Os如何让应用程序从管道读取

时间:2010-11-15 13:59:40

标签: linux shell

我很困惑linux如何让应用程序从管道中读取“cat / etc / hosts | grep'localhost'”。我知道在一个独立的程序中分叉一个孩子并通过管道彼此沟通。但是对于两个通过管道进行通信的独立程序我不知道如何。 例如“cat / etc / hosts | grep'localhost'”Grep如何知道它应该读取哪个文件描述符以从“cat / etc / hosts”获取输入。操作系统是否提供“常规”管道,让Grep知道从何处获取输入?我想知道这背后的机制。

1 个答案:

答案 0 :(得分:4)

示例中的grep从stdin获取它。 shell调用pipe(2)来创建管道,然后在每个dup2(2)子节点中fork(2)将其管道末尾分配给stdin或stdout,然后调用其中一个{ {1}}实际运行其他可执行文件的函数。