2009-03-16 16 views
7

Ich habe ein Rohr erstellt und ich habe dup2() verwendet, um Ströme 1 & 2 (stdout & stderr) in diese Rohre zu überschreiben.Wie kann ich fprintf verwenden und in eine Pipe schreiben?

Jetzt möchte ich fprintf verwenden, um in Stream 1 oder 2 zu schreiben, aber mein Programm scheint nichts auf der anderen Seite der Pipe zu empfangen. Ich habe versucht, printf() zu verwenden, aber ich bin nicht sicher, ob dies standardmäßig in stdout oder stream 1 schreibt. Wenn es in Stream 1 schreibt, nehme ich an, dass es ein Problem irgendwo tiefer in meinem Code ist.

Im Wesentlichen frage ich, gegeben eine Int den Stream darstellt, wie kann ich eine Datei * für die Verwendung in fprintf() erhalten?

Antwort

6

Wenn Sie einen Dateideskriptor haben und wollen eine FILE*, können Sie fdopen

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

fdopen eine Funktion Posix ist und in man fdopen dokumentiert. Um das Gegenteil zu tun, können Sie verwenden fileno

+0

Schließen Sie den Deskriptor, FILE-Zeiger, entweder, oder beides? – Bernard

+0

Der Dateideskriptor bleibt offen, bis Sie den Stream geschlossen haben. An diesem Punkt wird der Dateideskriptor entsprechend der Manpage geschlossen. –

Verwandte Themen