Como canalizar um arquivo sendo gravado?

1

Eu tenho um arquivo binário que está sendo gravado continuamente. Eu preciso ler o conteúdo completo desse arquivo para um pipe (seja para nc ou para um FIFO) e continue lendo enquanto está escrito (ou seja, o receptor não lerá EOF, mas bloqueará até que mais dados estejam disponíveis) .

Como fazer isso? Existe um truque de uma linha para fazer isso?

    
por lvella 13.11.2015 / 20:29

1 resposta

3

Sim, é chamado de pipe nomeado. Verifique fifo(7) para uma descrição e mkfifo(1) para uso e exemplos.

Um exemplo possivelmente inútil apenas para demonstrar sua capacidade de fazer o que você pede.

Em um 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

No outro terminal:

$ while true; do head named_pipe | md5sum; sleep 2; done
ff2776ab01b610f700c1f055ded5aef0  -
76e5d5367cdf43be35c8bb61cce270a0  -
d86370714bbe28a903fc407d6822aee2  -
6d5f7e09f76d0ce12cfb72456eedec8f  -
    
por 13.11.2015 / 20:48