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/filenofd
se abrió con algunas banderas (comoO_NONBLOCK
), ¿qué pasará con ellas después de que sefdopen
abra con nuevas banderas? ¿Seránxor
sustituidos o juntos?fdopen
varias 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
mkstemp
implica que las soluciones no estándar son aceptables en este caso particular. En ese caso, sin embargo, debería haber agregado laposix
etiqueta (que veo que ya se agregó).