2012-02-21 98 views
1

我正在学习系统类中的管道和外壳。我在搞strace。我正在运行一个名为dpipe的程序。Pipe()系统调用

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

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

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

回答

1

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

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

+0

即使不支持管道系统调用或多任务,也可以实现管道式语义。 DOS command.com通过在启动第二个命令之前将一个命令的输出重定向到一个文件来完成它。 (这当然有影响和某些限制..) – 2012-02-21 03:26:25

3

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

1

它们是文件描述符。并且管道不仅仅用在壳体中。管道可以通过任何程序完成,这是进程在Unix中交换信息的主要途径。它不是什么特殊的外壳。外壳只是一个正常的过程,使用户可以轻松启动其他过程。