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.[1]
Queste ultime sono concettualmente composte da:
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.
Convenzionalmente, i descrittori di file 0, 1 e 2 rappresentano rispettivamente lo standard input, lo standard output e lo standard error di un processo.