proc_pid_fd
Table des matières
Retour à l'index
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
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 à
Index
- NOM
-
- DESCRIPTION
-
- VOIR AUSSI
-
- TRADUCTION
-
This document was created by
man2html,
using the manual pages.
Time: 05:06:34 GMT, September 19, 2025