Answers:
这是因为netcat命令尚未启动!尝试打开fifo作为输入时,shell会阻塞。尝试
strace cat >fifo <fifo
而且您什么也看不到。而是使用例如
nc -k -l 4458 -v <>fifo >&0
这将打开fifo,以stdin的身份进行读取和写入,然后将其复制到stdout。
跟踪完整的bash命令将显示打开未进行读或写返回(直到完成相反的打开):
$ strace -f -e open bash -c 'nc -k -l 4458 -v >fifo <fifo'
...
Process 3631 attached
[pid 3631] open("fifo", O_WRONLY|O_CREAT|O_TRUNC, 0666
$ strace -f -e open bash -c 'nc -k -l 4458 -v <fifo >fifo'
...
Process 3684 attached
[pid 3684] open("fifo", O_RDONLY
man 3 mkfifo:打开FIFO以正常读取块,直到其他进程打开相同的FIFO进行写入为止,反之亦然。
cat myfifo | nc -k -l 4458 > myfifo
也可以。如果使用这样的文本文件file.txt,则nc -k -l 4458 < file.txt > file.txt
第一个连接将连接并关闭(因为输入被截断并且EOF关闭了套接字,这很有意义),第二个连接将成为健忘的回显服务器:它将回显每隔一行并将未显示的行保存到文本文件中。