有人可以在Linux中发布一个在Bash中使用命名管道的简单示例吗?
实用命名管道的最佳例子之一......
来自http://en.wikipedia.org/wiki/Netcat:
另一个有用的行为是使用
netcat
作为代理。端口和主机都可以重定向。看看这个例子:nc -l 12345 | nc www.google.com 80
端口12345表示请求。
这将在端口12345上启动
nc
服务器,并将所有连接重定向到google.com:80
。如果网络浏览器向nc
发出请求,该请求将被发送到谷歌但响应将不会发送到网络浏览器。这是因为管道是单向的。这可以使用命名管道来重定向输入和输出。mkfifo backpipe nc -l 12345 0<backpipe | nc www.google.com 80 1>backpipe
打开两个不同的壳,并将它们并排放置。在两者中,转到/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
在第二个shell中执行代码的第二部分之前,第一个shell不会给你任何提示。这是因为fifo读写是阻塞的。
您还可以通过执行ls -al myPipe
查看FIFO类型,并查看此特定类型文件的详细信息。
下一步是将代码放入脚本中!
以下是命令:
$ mkfifo named_pipe
$ echo "Hi" > named_pipe &
$ cat named_pipe
第一个命令创建管道。
第二个命令写入管道(阻塞)。 &
将此放入后台,以便您可以继续在同一个shell中键入命令。当下一个命令清空FIFO时,它将退出。
最后一个命令从管道中读取。
1号航站楼:
$ mknod new_named_pipe p
$ echo 123 > new_named_pipe
2号航站楼:
$ cat new_named_pipe
$ 123
$
new_named_pipe
都有接收和写入结束,因此它会显示信息并阻止停止命名管道在Linux中随处可见,我们在ls -l
命令中看到的大多数char和块文件都是char和block管道(所有这些都位于/ dev)。这些管道可以阻塞和非阻塞,主要优点是这些为IPC提供了最简单的方法。