Les quatre /dev/fd/0
, /dev/stdin
, /proc/self/fd/0
et /dev/pts/2
sont des noms de fichiers, tout comme /////dev/../dev/fd//0
, /bin/sh
, /etc/fstab
, /fioejfoeijf
, etc. Tout mais dernier exemple sont susceptibles d'être le nom d'un fichier existant sur votre machine. Un nom de fichier est une chaîne qui peut désigner un fichier sur votre système de fichiers; sous Linux, toute chaîne ne contenant pas d'octet nul et d'une longueur maximale de 4096 octets est un nom de fichier valide. Beaucoup de ces noms sont équivalents, par exemple /bin/sh
est équivalent à ///bin/sh
, /bin/../bin/sh
(en supposant qu'il /bin
s'agit d'un répertoire existant), etc. Tous les exemples que j'ai donnés jusqu'à présent sont des noms de fichiers absolus; il existe également des noms de fichiers relatifs, qui ne commencent pas par un /
et dont la signification dépend du répertoire courant.
La terminologie entourant les noms de fichiers n'est pas universelle; parfois «nom de fichier» signifie un chemin d'accès complet à un fichier, et parfois cela signifie le nom d'une entrée de répertoire. La terminologie POSIX est « filename » ou « pathname component » pour le nom d'une entrée de répertoire et « pathname » pour un chemin complet.
Un descripteur de fichier désigne un fichier ouvert dans un processus particulier. Le noyau maintient une table de descripteurs de fichiers pour chaque processus. Chaque entrée du tableau des descripteurs de fichiers indique ce qu'il faut faire si le processus demande la lecture, l'écriture et d'autres opérations sur le descripteur de fichiers.
Les descripteurs de fichiers peuvent correspondre à un fichier et avoir un nom associé, mais pas tous. Pour ceux qui le font, le fichier peut être un fichier normal, un répertoire, un fichier de périphérique ou un canal nommé (également appelé FIFO) (le type créé par mkfifo
); certains systèmes ont d'autres possibilités telles que les prises et les portes Unix. Des exemples de descripteurs de fichiers qui n'ont pas de fichier nommé associé incluent les canaux (le type créé par le pipe
) et les sockets réseau .
/dev/fd/0
, /dev/stdin
Et /proc/self/fd/0
sont des noms de fichiers (tous équivalents) avec un sens particulier: ils ont tous désigné selon le fichier est actuellement accessible via le descripteur de fichier 0. Lorsqu'un processus ouvre ceux - ci, les copies du noyau de la d'entrée avec l' index 0 dans le descripteur de fichier table de descripteurs à un nouveau descripteur. L'ouverture de l'un de ces fichiers équivaut à appeler dup(0)
. Les fichiers nommés sont un moyen d'obtenir indirectement un processus pour utiliser l'un de ses fichiers déjà ouverts plutôt que d'ouvrir un nouveau fichier; ils sont surtout utiles pour transmettre la ligne de commande d'un programme, où le programme attend le nom d'un fichier à ouvrir.