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.
#includenada. 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)