【问题标题】:How linux Os let applications read from pipelinux Os如何让应用程序从管道中读取
【发布时间】:2010-11-15 13:59:40
【问题描述】:

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

【问题讨论】:

    标签: linux shell


    【解决方案1】:

    grep 在您的示例中从标准输入获取它。 shell 负责调用 pipe(2) 来创建管道,然后在每个 fork(2) 子项中调用 dup2(2) 将它们的管道末端分配给 stdin 或 stdout,然后再调用 exec(3) 函数之一以实际运行其他可执行文件。

    【讨论】:

    • 这里的重点是,在给出的示例中,catgrep 都是 shell 的子进程,因此它们相关的。
    • 它是pipe(2),而不是mkfifo(3),因为管道未命名。
    猜你喜欢
    • 2014-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-13
    • 1970-01-01
    相关资源
    最近更新 更多