Tutti e quattro /dev/fd/0
, /dev/stdin
, /proc/self/fd/0
e /dev/pts/2
sono i nomi dei file, come lo sono /////dev/../dev/fd//0
, /bin/sh
, /etc/fstab
, /fioejfoeijf
, ecc Tutto ma che ultimo esempio sono suscettibili di essere il nome di un file esistente sul computer. Un nome file è una stringa che può designare un file sul tuo filesystem; sotto Linux, qualsiasi stringa che non contiene un byte null e che è lunga al massimo 4096 byte è un nome file valido. Molti di questi nomi sono equivalenti, ad esempio, /bin/sh
è equivalente a ///bin/sh
, /bin/../bin/sh
(assumendo /bin
è una directory esistente), ecc Tutti gli esempi che ho dato finora sono nomi di file assoluti; ci sono anche nomi di file relativi, che non iniziano con a /
e il cui significato dipende dalla directory corrente.
La terminologia che circonda i nomi dei file non è universale; a volte "nome file" indica un percorso completo di un file, a volte indica il nome di una voce della directory. La terminologia POSIX è " nome file " o " componente nome percorso " per il nome di una voce della directory e " nome percorso " per un percorso completo.
Un descrittore di file designa un file aperto in un particolare processo. Il kernel mantiene una tabella di descrittori di file per ogni processo. Ogni voce nella tabella dei descrittori di file indica cosa fare se il processo richiede la lettura, la scrittura e altre operazioni sul descrittore di file.
I descrittori di file possono corrispondere a un file e avere un nome associato, ma non tutti. Per quelli che lo fanno, il file può essere un normale file, una directory, un file dispositivo o una pipe denominata (anche chiamata FIFO) (il tipo creato da mkfifo
); alcuni sistemi hanno ulteriori possibilità come prese e porte unix. Esempi di descrittori di file a cui non è associato un file con nome includono pipe (il tipo creato da pipe
) e socket di rete .
/dev/fd/0
, /dev/stdin
E /proc/self/fd/0
sono i nomi dei file (tutto equivalente) con un significato particolare: tutti hanno designato a seconda di quale file è attualmente accessibile tramite file di descrizione 0. Quando un processo si apre questi, le copie del kernel la voce con indice 0 nella tabella descrittore descrittore di file in una nuova descrittore. Aprire uno di questi file equivale a chiamare dup(0)
. I file con nome sono un modo per ottenere indirettamente un processo per utilizzare uno dei suoi file già aperti anziché aprire un nuovo file; sono principalmente utili per passare alla riga di comando di un programma, in cui il programma si aspetta che si apra il nome di un file.