Tengo un FILE *
, devuelto por una llamada a fopen()
. Necesito obtener un descriptor de archivo para hacer llamadas como fsync(fd)
en él. ¿Cuál es la función para obtener un descriptor de archivo desde un puntero de archivo?
Tengo un FILE *
, devuelto por una llamada a fopen()
. Necesito obtener un descriptor de archivo para hacer llamadas como fsync(fd)
en él. ¿Cuál es la función para obtener un descriptor de archivo desde un puntero de archivo?
Respuestas:
La función adecuada es int fileno(FILE *stream)
. Se puede encontrar en <stdio.h>
, y es un estándar POSIX pero no un estándar C.
#include
nada. Simplemente quise decir que siempre es fácil encontrar el nombre del encabezado adecuado para una función estándar . Es decir, no es realmente crítico mencionar el nombre exacto del encabezado en la respuesta.
Incluso si fileno(FILE *)
puede devolver un descriptor de archivo, tenga MUY cuidado de no omitir el búfer de stdio. Si hay datos de búfer (lectura leída o escritura no vaciada), las lecturas / escrituras del descriptor de archivo pueden proporcionarle resultados inesperados.
Para responder una de las preguntas secundarias, para convertir un descriptor de archivo en un puntero de ARCHIVO, use fdopen(3)