GNU/Linux >> Linux Esercitazione >  >> Linux

Perché mi sembra di perdere dati usando questa costruzione di pipe bash?

Perché il nc comando all'interno di <(...) leggerà anche da stdin.

Esempio più semplice:

$ nc -l 9999 >/tmp/foo &
[1] 5659

$ echo text | cat <(nc -N localhost 9999) -
[1]+  Done                    nc -l 9999 > /tmp/foo

Dove è finito il text andare? Attraverso netcat.

$ cat /tmp/foo
text

Il tuo programma e nc competere per lo stesso stdin e nc ne riceve un po'.


epoll() o poll() restituiti con E/POLLIN ti diranno solo che un singolo read() può non bloccare.

Non che sarai in grado di eseguire molti read() di un byte fino a una nuova riga, come fai tu.

Dico può perché un read() dopo epoll() restituito con E/POLLIN potrebbe ancora bloccarsi.

Il tuo codice proverà anche a leggere oltre EOF e ignorerà completamente qualsiasi errore read().


Linux
  1. Perché il documento Parent Shell Here non funziona per il sottocomando in Dash ma Bash funziona?

  2. Utilizzo delle istruzioni Case in Bash

  3. Perché tutti usano Docker?

  4. Esempio di utilizzo di named pipe in Linux Bash

  5. Invia l'output alla funzione bash

Come utilizzare il comando di lettura Bash

Come leggere i file riga per riga in Bash

Bash ha letto Comando

Come leggere un file riga per riga in Bash

Come monitorare l'avanzamento dei dati attraverso un tubo utilizzando il comando "pv".

Scripting Bash:come leggere i dati dai file di testo