Pour lire à partir du descripteur de fichier 6, je peux utiliser <&6
ou </dev/fd/6
(aka /proc/self/fd/6
). Habituellement, les deux fonctionnent aussi bien. Cependant, si ce descripteur de fichier se trouve être un socket, des choses étranges se produisent. Par exemple:
$ 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
Ici ls
, le descripteur est bien présent. Mais l'accès aux données n'est pas possible de cette façon. Si j'utilise à la cat <&6
place, tout fonctionne bien à nouveau.
Quelle est la différence entre les deux façons d'accéder au descripteur de fichier?
Existe-t-il un bon moyen d'accéder à un descripteur si le nombre est donné dans une variable? ( </dev/fd/$fd
fonctionnerait, mais <&$fd
ne fonctionne pas.)
(La situation ci-dessus peut être observée sur Linux, mais pas sur OpenBSD. - On dirait que ce descripteur de fichier est un périphérique de caractères normal là-bas.)