2009-12-21 20 views
57

Estoy jugando con mkstemp(), que proporciona un descriptor de archivo, pero quiero generar una salida formateada a través de fprintf(). ¿Hay alguna manera fácil de transformar el descriptor de archivo proporcionado por mkstemp() en una estructura FILE * que sea adecuada para usar con fprintf()?¿Cómo obtener un puntero ARCHIVO desde un descriptor de archivo?

+3

Y el inverso: [¿Cómo puedo convertir un puntero de archivo (FILE *) a un descriptor de archivo (fd)?] (Http://stackoverflow.com/questions/3167298/how-can-i-convert-a -file-pointer-file-to-a-file-descriptor-fd) –

Respuesta

75

Uso fdopen():

FILE* fp = fdopen(fd, "w"); 
+24

Y para obtener el descriptor de archivo de un ARCHIVO * use 'fileno()': http://linux.die.net/man/3/fileno –

+1

si 'fd' se abrió con algunos indicadores (como' O_NONBLOCK') - ¿qué pasará con ellos después de que 'fdopen' lo abra con nuevos indicadores? ¿Serán 'xor'-ed juntos o sustituidos? – xealits

+0

No disponible en ANSI C. – jww

23

FILE* f = fdopen(d, "w");

hombre de salida fdopen:

SINOPSIS

#include <stdio.h> 

FILE * 
fdopen(int fildes, const char *mode); 

La función fdopen() asocia una secuencia con el descriptor de archivo existente, fildes. El modo de la secuencia debe ser compatible con el modo del descriptor de archivo. Cuando la transmisión se cierra a través de fclose(3), también se cierra fildes.

+1

No disponible en ANSI C. – jww

+0

Para más información claridad, consulte https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.2.0/com.ibm.zos.v2r2.bpxbd00/rtfdo.htm –

-7

No hay una forma estándar de hacer esto (o al revés) ya que el C Standard no tiene nada que decir sobre los descriptores de archivos. Su plataforma específica puede o no proporcionar dicho mecanismo.

+15

Depende de lo que quiere decir con "estándar". POSIX es un estándar. –

+1

Sin embargo, la pregunta era sobre C. –

+5

, La función fdopen() cumple con IEEE Std 1003.1-1988 ('' POSIX.1 ''). –

Cuestiones relacionadas