Как передать файл, в который выполняется запись?

У меня есть двоичный файл, который постоянно записывается в . Мне нужно прочитать полное содержимое этого файла в канал (либо в nc , либо в FIFO) и продолжать читать его, пока он записан (т.е. получатель не будет читать EOF, но будет блокироваться до тех пор, пока доступны больше данных).

Как это сделать? Есть ли для этого уловка с однострочным командным интерпретатором?

1
задан 13 November 2015 в 21:29
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  -
3
ответ дан 3 December 2019 в 18:37

Теги

Похожие вопросы