2009-12-21 27 views
57

Sto giocando con mkstemp(), che fornisce un descrittore di file, ma voglio generare output formattato tramite fprintf(). C'è un modo semplice per trasformare il descrittore di file fornito da mkstemp() in una struttura FILE * che è adatta per l'uso con fprintf()?Come ottenere un puntatore FILE da un descrittore di file?

+3

E l'inverso: [Come posso convertire un puntatore di file (FILE *) in un descrittore di file (fd)?] (Http://stackoverflow.com/questions/3167298/how-can-i-convert-a -file-pointer-file-to-a-file-descriptor-fd) –

risposta

75

Uso fdopen():

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

E per ottenere il descrittore di file da un FILE * utilizzare 'fileno()': http://linux.die.net/man/3/fileno –

+1

se 'fd' è stato aperto con alcuni flag (come' O_NONBLOCK') - cosa succederà con loro dopo che 'fdopen' lo apre con nuove bandiere? Saranno 'xor'-ed insieme o sostituiti? – xealits

+0

Non disponibile in ANSI C. – jww

23

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

uomo uscita fdopen:

SINOSSI

#include <stdio.h> 

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

La funzione fdopen() associa un flusso al descrittore di file esistente, fildes. La modalità del flusso deve essere compatibile con la modalità del descrittore di file. Quando lo stream viene chiuso tramite fclose(3), anche fildes viene chiuso.

+1

Non disponibile in ANSI C. – jww

+0

Per ulteriori informazioni chiarezza, consultare https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.2.0/com.ibm.zos.v2r2.bpxbd00/rtfdo.htm –

-7

Non c'è modo standard di fare questo (o viceversa) come il C standard non ha nulla da dire su descrittori di file. La tua piattaforma specifica può o non può fornire un tale meccanismo.

+15

Dipende da cosa intendi per "standard". POSIX è uno standard. –

+1

La domanda era relativa a C. –

+5

, tuttavia, la funzione fdopen() è conforme allo standard IEEE 1003.1-1988 ('' POSIX.1 ''). –

Problemi correlati