GNU/Linux >> Tutoriels Linux >  >> Linux

Pourquoi ai-je l'air de perdre des données en utilisant cette construction bash pipe ?

Parce que le nc commande dans <(...) lira également à partir de stdin.

Exemple plus simple :

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

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

D'où vient le text aller? Via le netcat.

$ cat /tmp/foo
text

Votre programme et nc concourir pour le même stdin, et nc en obtient une partie.


epoll() ou poll() retournant avec E/POLLIN vous dira seulement qu'un single read() peut pas bloquer.

Non pas que vous puissiez faire beaucoup de lectures d'un octet jusqu'à une nouvelle ligne, comme vous le faites.

Je dis peut car un read() après epoll() retourné avec E/POLLIN peut encore bloquer.

Votre code essaiera également de lire après EOF et ignorera complètement les erreurs de lecture().


Linux
  1. Pourquoi le parent Shell Here-document ne fonctionne pas pour la sous-commande dans Dash mais Bash fonctionne?

  2. Pourquoi ce "pendant la lecture" fonctionne-t-il dans un terminal, mais pas dans un script shell ?

  3. Utilisation des déclarations de cas dans Bash

  4. Tableau dans Bash introuvable

  5. utiliser random pour générer une chaîne aléatoire dans bash

Comment utiliser la commande de lecture Bash

Comment lire des fichiers ligne par ligne dans Bash

Commande de lecture bash

Comment lire un fichier ligne par ligne dans Bash

Comment surveiller la progression des données dans un tube à l'aide de la commande "pv"

Script bash :comment lire des données à partir de fichiers texte