У меня есть двоичный файл, в который постоянно записывается. Мне нужно прочитать полное содержимое этого файла в канале (либо nc
или в FIFO) и продолжайте читать его, пока он записывается (т.е. получатель не будет читать EOF, но будет блокироваться, пока не будет доступно больше данных).
Как это сделать? Есть ли уловка с однострочным командным интерпретатором?
Да, это называется именованный канал. Проверьте 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 -