Legge il file descriptor sottostante lo stream stream.
Restituisce il numero del file descriptor in caso di successo, e -1 qualora stream non sia valido, nel qual caso imposta errno a EBADF.
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:
Restituisce un valore diverso da zero se stream consente la lettura.
Restituisce un valore diverso da zero se stream consente la scrittura.
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 è:
Restituisce un valore diverso da zero se stream è aperto in sola lettura o se l'ultima operazione è stata di lettura.
Restituisce un valore diverso da zero se stream è aperto in sola scrittura o se l'ultima operazione è stata di scrittura.
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.