UNIX / Linux IPC: Lesen aus einer Pipe. Wie kann man die Datenlänge zur Laufzeit ermitteln?

Ich habe einen untergeordneten Prozess, der eine Ausgabe mit variabler Länge generiert und diese dann über eine Halbduplex-Pipe an den übergeordneten Prozess sendet. Wie verwende ich im übergeordneten Element die Funktion read ()? Wie kann ich zur Laufzeit die Größe der Daten ermitteln, um malloc () für einen Puffer auszuführen, da die Daten jedes Mal unterschiedlich lang sein können? Kann die Funktion fstat () für einen Pipe-Dateideskriptor verwendet werden?

Ich weiß, dass die Funktion read () eine bestimmte Anzahl von Bytes liest, aber 0 zurückgibt, wenn das Dateiende (nicht das EOF-Zeichen) erreicht ist, bevor die angeforderten Bytes gelesen wurden.

Ich verwende speziell Ubuntu GNU / Linux mit einem 2.6.27-9 Kernel.

Alle Beispiele in Richard Stevens 'Advanced Programming in the UNIX Environment haben entweder die Länge der Daten beim Schreiben in die Pipe angegeben oder sich auf die Funktion fgets () stdio.h verlassen. Da mir die Geschwindigkeit am Herzen liegt, möchte ich mich so weit wie möglich von stdio.h fernhalten.

Wird das mit Shared Memory unbedingt schneller gehen?

Danke, -Dhruv

Antworten auf die Frage(6)

Ihre Antwort auf die Frage