[Avanti]  [Indietro]  [Su]  

7.3.1 Le funzioni di controllo

Al contrario di quanto avviene con i file descriptor, le librerie standard del C non prevedono nessuna funzione come la fcntl per il controllo degli attributi dei file. Però, dato che ogni stream si appoggia ad un file descriptor, si può usare la funzione fileno per ottenere quest'ultimo, il prototipo della funzione è:

Restituisce il numero del file descriptor in caso di successo, e -1 qualora stream non sia valido, nel qual caso imposta errno a EBADF.

ed in questo modo diventa possibile usare direttamente fcntl.

Questo permette di accedere agli attributi del file descriptor sottostante lo stream, ma non ci dà nessuna informazione riguardo alle proprietà dello stream medesimo. Le glibc però supportano alcune estensioni derivate da Solaris, che permettono di ottenere informazioni utili.

Ad esempio in certi casi può essere necessario sapere se un certo stream è accessibile in lettura o scrittura. In genere questa informazione non è disponibile, e si deve ricordare come il file è stato aperto. La cosa può essere complessa se le operazioni vengono effettuate in una subroutine, che a questo punto necessiterà di informazioni aggiuntive rispetto al semplice puntatore allo stream; questo può essere evitato con le due funzioni __freadable e __fwritable i cui prototipi sono:

che permettono di ottenere questa informazione.

La conoscenza dell'ultima operazione effettuata su uno stream aperto è utile in quanto permette di trarre conclusioni sullo stato del buffer e del suo contenuto. Altre due funzioni, __freading e __fwriting servono a tale scopo, il loro prototipo è:

Le due funzioni permettono di determinare di che tipo è stata l'ultima operazione eseguita su uno stream aperto in lettura/scrittura; ovviamente se uno stream è aperto in sola lettura (o sola scrittura) la modalità dell'ultima operazione è sempre determinata; l'unica ambiguità è quando non sono state ancora eseguite operazioni, in questo caso le funzioni rispondono come se una operazione ci fosse comunque stata.


[Avanti]  [Indietro]  [Su]  
© 2000-2003 Simone Piccardi
Pubblicazione web curata da Mirko Maischberger