【问题标题】:Pipe() System CallPipe() 系统调用
【发布时间】:2012-02-21 02:42:29
【问题描述】:

我正在系统课程中学习管道和外壳。我在搞乱strace。我在一个名为 dpipe 的程序上运行它。

strace 日志中,我看到以下内容:

pipe([3, 4])
pipe([5, 6])

这些整数代表什么?我在该管道下基本上在 shell 中使用| 将一个命令的输出路由到另一个命令的输入。所以它只是让我们的生活更轻松。在这种情况下,上面的数字数组代表什么?此外,如果 piping 只是在 shell 中使用,为什么会有 C 系统调用呢?那是专为那些想要编写自己的 shell(让他们的生活更轻松)的人制作的吗?

【问题讨论】:

    标签: c bash shell pipe system-calls


    【解决方案1】:

    它们是pipe(2,3p) 返回的文件描述符。有关详细信息,请参阅 pipe(2) 手册页。

    【讨论】:

      【解决方案2】:

      Ignacio 正确解释了方括号中的数字是pipe() 系统调用返回的两个文件描述符。第一个是管道的读端,第二个是管道的写端。

      管道绝不只是由外壳使用,尽管这可能是使用它们的最常见的地方。但是,您倒退了; shell只能使用系统提供的系统调用,由于系统提供了pipe(),所以shell可以提供管道。如果没有来自系统调用形式的 o/s 的支持,shell 不太可能提供管道符号。所有的系统调用都是为了让程序员能够为他们的客户(他们编写的软件的最终用户)提供服务。

      【讨论】:

      • 即使不支持管道系统调用或多任务处理,也可以实现类似管道的语义。 DOS command.com 通过在启动第二个命令之前首先将一个命令的输出重定向到一个文件来做到这一点。 (这当然有影响和某些限制..)
      【解决方案3】:

      它们是文件描述符。管道不仅仅用于外壳。管道可以由任何程序完成,它是进程在 Unix 中交换信息的主要方式。这对贝壳来说并不是什么特别的东西。 shell 只是一个普通的进程,它使用户可以轻松地启动其他进程。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-11-26
        • 2014-12-25
        • 2016-02-09
        • 2012-10-10
        • 1970-01-01
        • 1970-01-01
        • 2021-11-08
        相关资源
        最近更新 更多