我正在学习Systems类中的管道和shell。我正在弄乱strace
。我在一个名为dpipe
的程序上运行它。
在strace
日志中,我看到以下内容:
pipe([3, 4])
pipe([5, 6])
这些整数代表什么?我在那个管道下基本上用在shell中,使用|
将一个命令的输出路由到另一个命令的输入。所以它只会让我们的生活更轻松。在这种情况下,那里的数字数组代表什么?此外,如果piping
只是在shell中使用,为什么有C系统调用呢?这仅仅是为了那些想要写自己的外壳(让他们的生活更轻松)的人吗?
答案 0 :(得分:3)
它们是pipe(2,3p)
返回的文件描述符。有关详细信息,请参阅pipe(2)
手册页。
答案 1 :(得分:1)
它们是文件描述符。管道不仅仅用在外壳中。管道可以由任何程序完成,它是进程在Unix中交换信息的主要方式。它不是shell的特殊之处。 shell只是一个普通的过程,使用户可以轻松启动其他过程。
答案 2 :(得分:1)
Ignacio正确解释了方括号中的数字是pipe()
系统调用返回的两个文件描述符。第一个是管道的读取端,第二个是管道的写入。
管道绝不仅仅由shell使用,尽管这可能是最常用的地方。但是,你倒退了; shell只能使用系统提供的系统调用,并且由于系统提供pipe()
,shell可以提供管道。如果没有系统调用形式的o / s支持,shell将不太可能提供管道符号。所有系统调用都是为了让程序员能够为他们的客户(他们编写的软件的最终用户)提供服务。