Estoy jugando con mkstemp(), que proporciona un descriptor de archivo, pero quiero generar una salida formateada a través de fprintf(). ¿Existe una manera fácil de transformar el descriptor de archivo proporcionado por mkstemp()en una FILE *estructura que sea adecuada para su uso fprintf()?
85

Respuestas:
Utilizar
fdopen():FILE* fp = fdopen(fd, "w");fuente
fileno(): linux.die.net/man/3/filenofdse abrió con algunas banderas (comoO_NONBLOCK), ¿qué pasará con ellas después de que sefdopenabra con nuevas banderas? ¿Seránxorsustituidos o juntos?fdopenvarias veces? (asumiendo que sucede dentro de alguna función que se llama una y otra vez)FILE* f = fdopen(d, "w");man fdopen salida:
#include <stdio.h> FILE * fdopen(int fildes, const char *mode);fuente
No hay una forma estándar de hacer esto (o al revés) ya que el Estándar C no tiene nada que decir sobre los descriptores de archivos. Su plataforma específica puede proporcionar o no dicho mecanismo.
fuente
mkstempimplica que las soluciones no estándar son aceptables en este caso particular. En ese caso, sin embargo, debería haber agregado laposixetiqueta (que veo que ya se agregó).