proc_pid_fd(5)

NOM
/proc/pid/fd/ - Descripteurs de fichier

DESCRIPTION

/proc/pid/fd/
    Il s'agit d'un sous-répertoire contenant un enregistrement pour chaque fichier ouvert par le processus. Chaque enregistrement a le descripteur du fichier pour nom, et est un lien symbolique vers le vrai fichier. Ainsi, 0 correspond à l'entrée standard, 1 à la sortie standard, 2 à la sortie d'erreur, etc.

    Pour les descripteurs de fichier de tubes et de sockets, les enregistrements seront des liens symboliques dont le contenu est le type de fichier avec l’inœud. Un appel de readlink(2) sur ce fichier renvoie une chaîne au format :

        type:[inœud]

    Par exemple, socket:[2248868] sera un socket et son inœud est 2248868. Pour les sockets, cet inœud permet de trouver plus de renseignements dans un des fichiers de /proc/net/.

    Pour les descripteurs de fichier sans inœud correspondant (par exemple les descripteurs de fichier produits par bpf(2), epoll_create(2), eventfd(2), inotify_init(2), perf_event_open(2), signalfd(2), timerfd_create(2) et userfaultfd(2)), l’enregistrement sera un lien symbolique avec un contenu de la forme :

        anon_inode:type_fichier

    Dans de nombreux cas (mais pas tous), le type_fichier est entouré de crochets.

    Par exemple, un descripteur de fichier epoll aura un lien symbolique dont le contenu est la chaîne anon_inode:[eventpoll].

    Dans un processus multithread, le contenu de ce répertoire n'est pas disponible si le processus principal est déjà terminé (typiquement par l'appel de pthread_exit(3)).

    Les programmes qui prennent un nom de fichier comme paramètre de la ligne de commande, mais qui ne prennent pas leur entrée sur l'entrée standard si aucun paramètre n'est fourni, ou qui écrivent dans un fichier indiqué par un paramètre de la ligne de commande sans envoyer la sortie sur la sortie standard si aucun paramètre n'est fourni, peuvent néanmoins utiliser l'entrée standard et la sortie standard par l'intermédiaire des fichiers /proc/pid/fd comme arguments de ligne de commande. Par exemple, en supposant que l'option -i indique le nom du fichier d'entrée et l'option -o le nom du fichier de sortie :

        $ tototiti -i /proc/self/fd/0 -o /proc/self/fd/1 ...

    et vous avez alors réalisé un filtre fonctionnel.

    /proc/self/fd/N est approximativement identique à /dev/fd/N sur certains systèmes UNIX ou de type UNIX. En fait, la plupart des scripts MAKEDEV de Linux lient symboliquement /dev/fd à /proc/self/fd.

    La plupart des systèmes fournissent les liens symboliques /dev/stdin, /dev/stdout et /dev/stderr, qui sont respectivement liés aux fichiers 0, 1 et 2 de /proc/self/fd. Par conséquent, l'exemple précédent peut être écrit de la façon suivante :

        $ tototiti -i /dev/stdin -o /dev/stdout ...

    La permission de déréférencer ou de lire (readlink(2)) ces liens symboliques dans ce répertoire est régie par une vérification du mode d’accès ptrace PTRACE_MODE_READ_FSCREDS ; consulter ptrace(2).

    Remarquez que pour les descripteurs de fichier référençant des inœuds (tubes et sockets, voir ci-dessus), ces inœuds ont toujours les bits de permission et les informations d’appartenance distincts de ceux de l’enregistrement /proc/pid/fd, et le propriétaire peut être différent des ID utilisateur et groupe du processus. Un processus non privilégié peut ne pas avoir les permissions suffisantes pour les ouvrir, comme dans cet exemple :

        $ echo test | sudo -u nobody cat
        test
        $ echo test | sudo -u nobody cat /proc/self/fd/0
        cat: /proc/self/fd/0: Permission denied

    Le descripteur de fichier 0 se réfère au tube créé par l’interpréteur et ayant pour propriétaire cet utilisateur d’interpréteur, qui est nobody, aussi cat n’a pas la permission de créer un nouveau descripteur de fichier pour lire cet inœud, même s’il peut toujours lire à partir de son descripteur de fichier 0 existant.

VOIR AUSSI
proc(5)

TRADUCTION
La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org>, Jean-Paul Guillonneau <guillonneau.jeanpaul@free.fr> et Lucien Gentis <lucien.gentis@waika9.com>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 (https://www.gnu.org/licenses/gpl-3.0.html) concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org.