Untuk membaca dari file deskriptor 6 saya dapat menggunakan <&6
atau </dev/fd/6
(alias /proc/self/fd/6
). Biasanya keduanya bekerja sama baiknya. Namun jika deskriptor file tersebut kebetulan berupa soket, hal-hal aneh terjadi. Sebagai contoh:
$ bash -c 'ls -l /dev/fd/6;cat /dev/fd/6' 6</dev/tcp/localhost/12345
lrwx------ 1 michas michas 64 Jan 10 19:50 /dev/fd/6 -> socket:[315010]
cat: /dev/fd/6: No such device or address
Di sini ls
menunjukkan deskriptor memang ada. Tetapi mengakses data tidak dimungkinkan dengan cara ini. Jika saya gunakan cat <&6
sebagai gantinya semuanya bekerja dengan baik lagi.
Apa perbedaan antara kedua cara mengakses deskriptor file?
Apakah ada cara yang baik untuk mengakses deskriptor jika nomornya jika diberikan dalam variabel? ( </dev/fd/$fd
akan bekerja, tetapi <&$fd
tidak.)
(Situasi di atas dapat diamati di linux, tetapi tidak di OpenBSD. - Sepertinya deskriptor file adalah perangkat karakter biasa di sana.)