web-dev-qa-db-fra.com

Comment convertir un pointeur de fichier (FILE * fp) en descripteur de fichier (int fd)?

J'ai un FILE *, Renvoyé par un appel à fopen(). Je dois obtenir un descripteur de fichier, pour faire des appels comme fsync(fd) dessus. Quelle est la fonction pour obtenir un descripteur de fichier à partir d'un pointeur de fichier?

161
Phil Miller

La fonction appropriée est int fileno(FILE *stream). On peut le trouver dans <stdio.h>, et est un standard POSIX mais pas le standard C.

196
Phil Miller

Même si fileno(FILE *) peut renvoyer un descripteur de fichier, veillez à ne pas contourner le tampon de stdio. Si le tampon contient des données (en lecture ou en écriture), les lectures/écritures à partir du descripteur de fichier peuvent donner des résultats inattendus.

Pour répondre à l'une des questions annexes, pour convertir un descripteur de fichier en un pointeur FILE, utilisez fdopen(3)

34
Mark Gerolimatos