Incluso si fileno(FILE *)
puede devolver un descriptor de archivo, tenga MUCHO cuidado de no omitir el búfer de stdio. Si hay datos de búfer (ya sea de lectura o de escritura sin vaciar), las lecturas/escrituras del descriptor de archivo pueden generar resultados inesperados.
Para responder a una de las preguntas secundarias, para convertir un descriptor de archivo en un puntero de ARCHIVO, use fdopen(3)
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.