2017-11-29 9 views
0

Ich habe zwei Prozesse A, B und eine Pipe (my_pipe [2]) zwischen ihnen, ich brauche Prozess A um die Ausgabe von Prozess B zu lesen. In Prozess B habe ich dup2(my_pipe[1], stdout); in A muss ich die Ausgabe von B weiterlesen und Zeile für Zeile weiterverarbeiten.Wie benutze ich fgets/fread um eine PIPE zu lesen

Ich möchte fread/fgets in A statt read verwenden, aber my_pipe[0] ist ein Dateideskriptor anstelle einer * FILE. Wie kann ich fread/fgets für eine Pipe verwenden?

+0

Willkommen bei Stack Overflow. Bitte beachten Sie, dass die bevorzugte Art zu sagen "Danke" hier ist durch Up-Voting gute Fragen und hilfreiche Antworten (sobald Sie genug Ruf zu tun haben), und durch die Annahme der hilfreichsten Antwort auf alle Fragen Sie fragen (Das gibt Ihnen auch einen kleinen Schub für Ihre Ruf). Bitte lesen Sie die [Über] Seite und auch [Wie stelle ich Fragen? hier?] (Http://stackoverflow.com/help/how-to-ask) und [Was mache ich, wenn jemand meine Frage beantwortet ?] (http://stackoverflow.com/help/someone-answers) –

Antwort

3

Use fdopen() (die Referenz POSIX verwenden, da Sie bereits POSIX-Datei Deskriptoren):

Name

fdopen - associate a stream with a file descriptor 

SYNTAX

[CX] [Option Start] #include <stdio.h> 

FILE *fdopen(int fildes, const char *mode); [Option End] 

BESCHREIBUNG

The fdopen() function shall associate a stream with a file descriptor. 

The mode argument is a character string having one of the following values: 

r or rb 
    Open a file for reading. 
w or wb 
    Open a file for writing. 
a or ab 
    Open a file for writing at end-of-file. 
r+ or rb+ or r+b 
    Open a file for update (reading and writing). 
w+ or wb+ or w+b 
    Open a file for update (reading and writing). 
a+ or ab+ or a+b 
    Open a file for update (reading and writing) at end-of-file. 

Die Bedeutung dieser Flags ist genau wie in fopen() angegeben, außer dass die mit w beginnenden Modi nicht zu einer Kürzung der Datei führen dürfen.

Zum Beispiel:

FILE *fptr = fdopen(fd, "rb"); 

Dazu fread() und fgets() (unter anderem) auf fptr nutzen können.

+0

vielen Dank! Ich werde es versuchen – BruceTerp

Verwandte Themen