GNU/Linux >> Belajar Linux >  >> Linux

Mengapa saya sepertinya kehilangan data menggunakan konstruksi pipa bash ini?

Karena nc perintah di dalam <(...) juga akan membaca dari stdin.

Contoh yang lebih sederhana:

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

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

Di mana text Pergilah? Melalui netcat.

$ cat /tmp/foo
text

Program Anda dan nc bersaing untuk stdin yang sama, dan nc mendapatkan sebagian.


epoll() atau poll() kembali dengan E/POLLIN hanya akan memberi tahu Anda bahwa tunggal read() mungkin tidak memblokir.

Bukan berarti Anda akan dapat melakukan banyak read() satu byte hingga baris baru, seperti yang Anda lakukan.

Saya katakan mungkin karena read() setelah epoll() dikembalikan dengan E/POLLIN mungkin masih memblokir.

Kode Anda juga akan mencoba membaca melewati EOF, dan sepenuhnya mengabaikan semua kesalahan read().


Linux
  1. Mengapa "sementara Baca" Ini Bekerja Di Terminal, Tapi Tidak Di Skrip Shell?

  2. Menggunakan Pernyataan Kasus di Bash

  3. Output pipa ke fungsi bash

  1. menggunakan acak untuk menghasilkan string acak di bash

  2. Mengapa $LD_LIBRARY_PATH saya tidak disetel saat menggunakan layar dengan bash?

  3. Mengapa menggunakan innodb_file_per_table?

  1. Menggunakan Bash untuk otomatisasi

  2. Mengapa Dokumen Induk Shell Di Sini Tidak Berfungsi Untuk Sub-perintah Di Dash Tapi Bash Bekerja?

  3. Mengapa Semua Orang Menggunakan Docker?