我有一个正在被连续写入的二进制文件。 我需要读取文件的全部内容到pipe道(或者是数据或者FIFO)并且在写入的时候继续读取(即接收器不会读取EOF,但会阻塞,直到有更多的数据可用)。
怎么做? 是否有一个行shell的窍门呢?
是的,它被称为命名pipe道。 检查fifo(7)的说明和mkfifo(1)的使用和示例。
一个可能无用的例子,只是为了展示它能够做你所要求的。
在terminal上:
$ 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
在其他terminal上:
$ while true; do head named_pipe | md5sum; sleep 2; done ff2776ab01b610f700c1f055ded5aef0 - 76e5d5367cdf43be35c8bb61cce270a0 - d86370714bbe28a903fc407d6822aee2 - 6d5f7e09f76d0ce12cfb72456eedec8f -