我正在学习系统类中的管道和外壳。我在和strace
胡闹。我在一个叫dpipe
的程序上运行它。
在strace
日志中,我看到了以下内容:
pipe([3, 4])
pipe([5, 6])
这些整数代表什么?在shell中,管道基本上是用来将一个命令的输出路由到使用|
的另一个命令的输入。所以这只会让我们的生活更轻松。在这种情况下,上面的数字数组代表什么?此外,如果piping
只是在shell中使用,为什么会有C系统调用来支持它?这是专为那些想要编写自己的shell (让他们的生活更容易)的人而做的吗?
发布于 2012-02-21 10:52:30
Ignacio正确地解释了方括号中的数字是由pipe()
系统调用返回的两个文件描述符。第一个是管道的读取端,第二个是管道的写操作。
管道绝不是仅由shell使用的,尽管这可能是使用它们的最常见的地方。但是,它是反向的;shell只能使用系统提供的系统调用,并且因为系统提供pipe()
,所以shell能够提供管道。如果没有o/s以系统调用的形式提供支持,外壳就不太可能提供管道表示法。所有的系统调用都是为了让程序员能够为他们的客户(他们编写的软件的最终用户)提供服务。
发布于 2012-02-21 10:44:25
它们是由pipe(2,3p)
返回的文件描述符。有关详细信息,请参阅pipe(2)
手册页。
发布于 2012-02-21 10:48:10
它们是文件描述符。而且管道并不只是在外壳中使用。管道可以由任何程序完成,它是Unix中进程交换信息的主要方式。对于shell来说,它并不是什么特别的东西。shell只是一个普通的进程,它使用户可以轻松地启动其他进程。
https://stackoverflow.com/questions/9371401
复制相似问题