Ho un FILE *, restituito da una chiamata a fopen(). Ho bisogno di ottenere un descrittore di file da esso, per effettuare chiamate come fsync(fd)su di esso. Qual è la funzione per ottenere un descrittore di file da un puntatore a file?
Ho un FILE *, restituito da una chiamata a fopen(). Ho bisogno di ottenere un descrittore di file da esso, per effettuare chiamate come fsync(fd)su di esso. Qual è la funzione per ottenere un descrittore di file da un puntatore a file?
Risposte:
La funzione corretta è int fileno(FILE *stream). Può essere trovato in <stdio.h>, ed è uno standard POSIX ma non standard C.
#includenulla. Volevo solo dire che è sempre facile trovare il nome dell'intestazione corretta per una funzione standard . Vale a dire non è molto importante menzionare il nome esatto dell'intestazione nella risposta.
Anche se fileno(FILE *)può restituire un descrittore di file, fai MOLTO attenzione a non bypassare il buffer di stdio. Se sono presenti dati buffer (in lettura o in scrittura senza scrittura), le letture / scritture dal descrittore di file potrebbero fornire risultati imprevisti.
Per rispondere a una delle domande secondarie, per convertire un descrittore di file in un puntatore FILE, utilizzare fdopen(3)