GNU/Linux >> Belajar Linux >  >> Linux

Mengapa File Descriptor Dibuka Dan Hanya Dibaca Sekali?

Mengapa hanya bisa digunakan 1 kali ketika kita membuka deskriptor file sendiri dan mengarahkannya ke stdin?
Silakan lihat contoh di bawah ini untuk memahami apa yang ingin saya katakan. Setelah membacanya sekali dengan perintah cat, file tidak dibaca melalui deskriptor file yang sama untuk kedua kalinya.

└─$ exec 6< input.txt
└─$ cat <&6
i am just string
and another string..
└─$ cat <&6
└─$

Jawaban yang Diterima:

Untuk mencetak file, cat pertama harus membacanya sampai akhir. exec 6< input.txt menyebabkan shell menahan deskriptor file hingga
shell mati atau menutupnya, sehingga offset file masih menunjuk ke akhir file
ketika cat kedua dipanggil, yang dengan demikian tidak menulis apa pun ke stdout.

Jika pada sistem berbasis Linux, Anda dapat melihat hal itu terjadi dengan mengintip info deskriptor file:

echo "File contents" > input.txt
exec 6< input.txt
cat "/proc/$$/fdinfo/6"
cat <&6
cat "/proc/$$/fdinfo/6"
cat <&6

Jika Anda menjalankan skrip itu, Anda akan mendapatkan sesuatu seperti

pos:    0
flags:  0100000
mnt_id: 113
File contents
pos:    14
flags:  0100000
mnt_id: 113

mengkonfirmasikan bahwa offset (pos ) bukan 0
saat cat second kedua dieksekusi, tetapi menunjuk ke ujungnya.

Untuk mengatur ulang offset, Anda dapat menambahkan exec 6< input.txt lainnya di antara cat s.


Linux
  1. Baca Dan Tulis Ke File Yang Sama Di Linux Tanpa Menimpanya??

  2. Apakah Tail Membaca Seluruh File?

  3. Echo To File Descriptor Menimpa File?

  1. Pengalihan Io Dan Perintah Kepala?

  2. Mengapa Regex Di Bash Hanya Bekerja Jika Itu Adalah Variabel Dan Tidak Secara Langsung??

  3. Mengapa forking proses saya menyebabkan file dibaca tanpa batas

  1. Baca dan tulis data dari mana saja dengan pengalihan di terminal Linux

  2. Mengapa direktori root dilambangkan dengan tanda /?

  3. Apa perintah untuk menyalin, membaca, dan menghapus file di linux