next up previous contents index return to home!
Next: Esercizi Up: La I/O Standard Library Previous: La I/O Standard Library   Indice   Indice analitico

Relazioni tra libreria Posix e libreria ANSI

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.


next up previous contents index
Next: Esercizi Up: La I/O Standard Library Previous: La I/O Standard Library   Indice   Indice analitico
Giuseppe Lipari 2002-10-27