Je sais que la plupart des périphériques sont présentés dans le répertoire /dev
, mais ce n’est que maintenant que j’ai remarqué deux noms très étranges, mais familiers, dans ce répertoire ...
Je parle de stdin@
et stdout@
en bas:
A quoi servent-ils? Sont-ils utilisés par les fonctions du langage C?
Ces fichiers sont en fait appelés stdin
, stdout
et stderr
. Le caractère _@
_ est ajouté par ls
pour vous indiquer qu'ils sont liens symboliques . _ls -l
_ indiquerait que les cibles de ces liens symboliques sont _/proc/self/fd/0
_, _/proc/self/fd/1
_ et _/proc/self/fd/2
_.
/proc
est un système de fichiers virtuel fourni par le noyau qui affiche des informations sur le système d'exploitation. Entre autres choses, il existe des répertoires tels que _/proc/1234
_ qui contiennent des informations sur le processus portant l'ID 1234. _/proc/self
_ est un lien symbolique vers le répertoire quel que soit le processus y accédant (le noyau renvoie une cible différente à une autre). processus).
_/proc/self/fd
_ (qui est également lié symboliquement à _/dev/fd
_) contient une entrée par fichier ouvert par le processus. Chaque entrée correspond à un descripteur de fichier et constitue un lien symbolique vers le fichier (si possible - pour les tubes, les sockets et les fichiers supprimés, le lien symbolique fournit des informations utiles pour le débogage mais ne pointe pas vers un fichier que vous pouvez rouvrir par nom). . Ces descripteurs de fichier sont les mêmes que vous manipulez avec des fonctions C telles que open
, close
, dup
, read
, write
, etc. Ils ne le sont pas utilisé par les fonctions C, ce sont d'autres moyens d'interagir avec les mêmes objets.
La raison _/dev/stdin
_ et les amis existent, c’est qu’un programme requiert parfois un nom de fichier, mais que vous souhaitez lui indiquer d’utiliser un fichier déjà ouvert (un canal, par exemple). Vous pouvez donc passer _/dev/stdin
_ pour indiquer au programme de lire son entrée standard.
Lectures complémentaires: