2

我试图弄清楚一行在 bash 脚本文件中的含义:

mkfifo mypipe
nc -l 12345 < mypipe | /home/myprogram > mypipe

这是我的理解: nc -l 部分在端口 12345 上创建类似服务器端的行为,该行为从 mypipe 接收输入,将输出通过管道传输到程序,将程序输出通过管道传输回 mypipe。

我的问题首先是我的分析是否正确?二、mkfifo到底是什么东西,比如它是什么样的文件?我也不明白 nc -l 究竟输出了什么以便通过管道输入 myprogram。

谢谢你的帮助。

4

1 回答 1

3

mkfifo创建一个管道文件。在这里,FIFO的意思是“先进先出”。无论一个进程写入管道,第二个进程都可以读取。它不是一个“真正的”文件——数据永远不会保存到磁盘上;但是Linux将其许多机制抽象为文件,以简化事情。

nc -l 12345将绑定到套接字 12345 并监听;当它捕获到一个传入连接时,它将标准输入传递给远程主机,并将远程主机的传入数据传递给标准输出。

因此,这里的架构是:

remote host -> nc -> regular pipe -> myprogram
myprogram -> mypipe -> nc -> remote host

有效地让 myprogram 和远程主机对话,即使 myprogram 被设计为从标准输入读取并写入标准输出。

由于 bash 管道 ( |) 只处理一个方向的通信,因此您需要创建一个显式的第二个管道来进行双向进程间连接。

于 2011-12-20T04:28:45.300 回答