Dato un puntatore a FILE è possibile ottenere il relativo descrittore di file, e viceversa:
int fileno(FILE *fp); FILE *fdopen(int fd); |
Va detto che mentre le funzioni standard POSIX per l'accesso ai file sono primitive di sitema operativo, e quindi in quanto tali atomiche, le funzioni di libreria ANSI sono semplici funzioni di libreria implementate nello spazio di memoria del processo chiamante, e quindi possono essere interrotte a metà. Inoltre, la maggior parte di loro sono non rientranti, cioè utilizzano delle strutture globali (ad esempio, il buffer contenuto nella struttura FILE).
Questo può porre qualche problema: per esempio è bene non utilizzare tali funzioni dentro l'handler di un segnale! Supponiamo ad esempio di usare una printf() dentro l'handler di un segnale e dentro il programma: se il segnale interrompe l'esecuzione della printf(), il risultato è impredicibile! Infatti, alcune delle strutture globali utilizzate dalla printf() potrebbero essere in uno stato inconsistente quando la printf viene richiamata dall'interno del signal handler. Per maggiori dettagli, vedere il capitolo sulla sincronizzazione tra processi.