GNU/Linux >> Znalost Linux >  >> Linux

Proč se zdá, že při použití této konstrukce bash pipe ztrácím data?

Protože nc příkaz uvnitř <(...) bude také číst ze stdin.

Jednodušší příklad:

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

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

Kde se vzal text jít? Prostřednictvím netcat.

$ cat /tmp/foo
text

Váš program a nc soutěžit o stejný stdin a nc něco z toho dostane.


epoll() nebo poll() vracející se s E/POLLIN vám pouze sdělí, že single read() může neblokovat.

Ne, že budete moci provádět mnoho čtení() jednoho bajtu až do nového řádku, jak to děláte vy.

Říkám může protože read() po epoll() vrácené pomocí E/POLLIN může stále blokovat.

Váš kód se také pokusí přečíst minulé EOF a zcela ignoruje všechny chyby read().


Linux
  1. Proč dokument Parent Shell Here nefunguje pro dílčí příkaz v Dash, ale funguje Bash?

  2. Použití případových prohlášení v Bash

  3. pomocí náhodného vygenerování náhodného řetězce v bash

  1. Proč to „při čtení“ funguje v terminálu, ale ne ve skriptu Shell?

  2. Proč všichni používají Docker?

  3. Proč používat innodb_file_per_table?

  1. Pole v Bash nenalezeno

  2. Příklad použití pojmenovaných kanálů v Linux Bash

  3. Jak číst předposlední řádek v souboru pomocí Bash?