2009-03-16 10 views
7

Ho creato una pipe e ho usato dup2() per sovrascrivere i flussi 1 & 2 (stdout & stderr) in questi tubi.Come posso usare fprintf e scrivere su una pipe?

Ora desidero utilizzare fprintf per scrivere sullo stream 1 o 2, ma il mio programma non sembra ricevere nulla dall'altra parte del tubo. Ho provato a usare printf(), ma non sono sicuro se questo scrive su stdout o stream 1 per impostazione predefinita. Se scrive nello stream 1, credo che sia un problema da qualche parte più in profondità nel mio codice.

In sostanza, sto chiedendo, dato un int che rappresenta il flusso, come posso ottenere un FILE * adatto per l'uso in fprintf()?

risposta

6

Se si dispone di un descrittore di file e volete una FILE*, è possibile utilizzare fdopen

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

fdopen è una funzione Posix e documentato in man fdopen. Per eseguire il reverse è possibile utilizzare fileno

+0

Chiude il descrittore, il puntatore FILE o entrambi? – Bernard

+0

Il descrittore di file rimane aperto finché non si chiude lo stream, a quel punto si chiuderà il descrittore di file in base alla manpage. –