如何通过管道将正在写入的文件传输出去?

如何通过管道将正在写入的文件传输出去?

我有一个二进制文件,需要连续写入。我需要将该文件的全部内容读入管道(无论是写入nc还是写入 FIFO),并在写入时继续读取(即接收器不会读取 EOF,但会阻塞直到有更多数据可用)。

怎么做?有没有一行 shell 技巧可以做到这一点?

答案1

是的,它被称为命名管道。请查看fifo(7)描述以及mkfifo(1)用法和示例。

一个可能无用的例子只是为了证明它能够完成你要求的事情。

在终端上:

$ mkfifo named_pipe
$ ll named_pipe
prw-------. 1 dsastre dsastre 0 Nov 13 19:40 named_pipe|

$ while true; do dd if=/dev/urandom of=named_pipe bs=24; sleep 2; done

在其他终端上:

$ while true; do head named_pipe | md5sum; sleep 2; done
ff2776ab01b610f700c1f055ded5aef0  -
76e5d5367cdf43be35c8bb61cce270a0  -
d86370714bbe28a903fc407d6822aee2  -
6d5f7e09f76d0ce12cfb72456eedec8f  -

相关内容