|
像bash shell是怎么实现管道的?
安装《边干边学》上的做法是用pipe()打开一个管道,然后把管道的一端重定向为一个命令的标准输出,把管道的另一端重定向为标准输入的。
我也这样做的,不过遇到很多问题。
比如在/dev目录下执行ls|more
因为dev下的文件很多,不可能像变干边学上的做法把ls输出的东西全都写到管道里,然后退出在运行more把数据从管道里读出来。所以必须让ls写管道的同时让more从管道把数据读走。不过有一个问题是more的标准输入被重定向到一个管道上,可是more打印一个屏幕之后会要求用户翻屏。遗憾的是现在more根本就不可能从键盘上读数据了。那怎么才能让more从键盘上读到数据呢?或者说shell中的管道是不是真的是这样实现的?
还有一个很奇怪的现象:我运行ls|more之后这两个命令就挂在那了。然后我在键盘上敲入任何字符都不会在屏幕上输出,但是shell确实是接收到了这些输入的字符的啊!这是为什么啊? |
|