Descrittore di file
# Descrittore di file

Nei sistemi operativi Unix e Unix-like un descrittore di file (o file descriptor) è un numero intero non negativo che rappresenta un file, una pipe o un socket aperto da un processo e sul quale il processo può effettuare operazioni di input/output.

Tale numero è di fatto un indice in un array che fa parte del process control block il quale contiene a sua volta riferimenti a strutture dati interne al kernel (nella file table) che mantengono informazioni su ciascun canale di input/output in uso nel sistema.

Queste ultime sono concettualmente composte da:

* un riferimento all'inode (nel caso di file e directory) o al socket (in caso di comunicazioni di rete) o alla pipe;
* una serie di permessi che indicano quali operazioni di input/output è possibile effettuare (tipicamente lettura e/o scrittura) ed eventuali modalità speciali (ad es. scrittura solo in coda ai dati esistenti);
* lo stato corrente, che indica ad esempio il raggiungimento della fine dei dati;
* per i file regolari, la posizione corrente nel file per la prossima operazione di input/output, espressa come offset a partire dal primo byte del file.

Dei processi distinti, che tramite strumenti di comunicazione tra processi si sono scambiati tra loro dei descrittori di file, possono avere dei descrittori che fanno riferimento alla stessa voce della file table, e quindi condividere lo stato corrente e la posizione corrente. Notare però che lo stesso file può comparire in più voci della file table, e quindi essere referenziato da più gruppi di descrittori di file.

## Descrittori di file particolari

Convenzionalmente, i descrittori di file 0, 1 e 2 rappresentano rispettivamente lo standard input, lo standard output e lo standard error di un processo.

