有人可以张贴在Linux中使用命名管道中的Bash一个简单的例子?
Answer 1:
一个实际使用命名管道的最好的例子...
从http://en.wikipedia.org/wiki/Netcat :
另一种有用的行为正在使用
netcat
作为代理。 两个端口和主机可以重定向。 请看下面的例子:nc -l 12345 | nc www.google.com 80
端口12345表示请求。
这将启动一个
nc
12345端口上的服务器和所有连接重定向到google.com:80
。 如果Web浏览器发出一个请求nc
,请求将被发送到谷歌,但响应不会发送到Web浏览器。 这是因为管道是单向的。 这可以被合作周围有一个命名管道重定向输入和输出。mkfifo backpipe nc -l 12345 0<backpipe | nc www.google.com 80 1>backpipe
Answer 2:
打开两个不同的外壳,和并排离开他们身边。 在这两个,到/tmp/
目录:
cd /tmp/
在第一种类型的:
mkfifo myPipe
echo "IPC_example_between_two_shells">myPipe
在第二个,类型:
while read line; do echo "What has been passed through the pipe is ${line}"; done<myPipe
第一壳不会给你任何提示回来,直到你在第二个外壳程序执行代码的第二部分。 这是因为FIFO的读写阻塞。
您也可以通过做看看FIFO型ls -al myPipe
,看看这个特定类型的文件的细节。
下一步将着手中的代码的脚本!
Answer 3:
下面是命令:
$ mkfifo named_pipe
$ echo "Hi" > named_pipe &
$ cat named_pipe
第一个命令创建的管道。
第二个命令写入管道(粘连)。 在&
把这个放到后台,所以你可以继续在同一个shell键入的命令。 当FIFO被下一个命令清空这将退出。
最后一个命令从管道中读取。
Answer 4:
1号航站楼:
$ mknod new_named_pipe p
$ echo 123 > new_named_pipe
- 1号航站楼创建一个命名管道。
- 它使用echo写在它的数据。
- 它被阻塞,因为没有接收端(如管道两个命名和无名需要接收和写入结束到它)
2号航站楼:
$ cat new_named_pipe
$ 123
$
- 从终端2中,增加了对数据的接收端。
- 它使用cat读取的数据。
- 由于接收和写入端部有用于
new_named_pipe
它显示的信息,并阻止停止
命名管道使用无处不在Linux中,大多数在焦炭和块的文件,我们看到ls -l
命令是焦炭和块管(所有这些驻留在/ dev的)。 这些管可以阻塞和非阻塞的,并且主要优点是这些提供了一种用于IPC的最简单的方法。
文章来源: Example of using named pipes in Linux Bash