ich hab folgendes Problem, ich will stdout und stderr eines Programms in eine Pipe oder Datei zusammenführen, aber so, dass die Reihenfolge der ankommenden Zeilen erhalten bleibt und ich noch erkennen kann, von welcher Pipe die Zeile stammt. Zum Beispiel durch ein Zeichen am Zeilenanfang oder so.
Erstmal geht das mit ANSI C überhaupt nicht. Da gibt es nur system und das wars.
Was sowohl Linux alsauch Windows unterstützen ist popen, wobei aber da nur stdout gelesen werden kann.
Daher wirst Du wohl eine sehr betriebssystemabh. Lösung benötigen. Daher die Frage: welches Betriebssystem? -- Gruß, virtual Quote of the Month Ich eß' nur was ein Gesicht hat (Creme 21)
Ich hab auch einfach die stdout und stderr in eine Dateiumgeleitet (freopen("out", "w", stderr) & freopen("out", "w", stdout)), aber da kamen die nicht in korrekter Reihenfolge an. Vorallem wenn das "abgehörte" Programm zuschnell Ausgaben produziert.
@Disi Nee, die 1 ist redundant. Viel entscheidender ist die Reihenfolge:
Code:
prog 2>&1 >a
Macht was völlig anderes als
Code:
prog >a 2>&1
Die letztere Zeile ist im allg. die, welche benutzt wird, Ausgaben zu bündeln. In der ersten Zeile wird einfach stderr nach dem stdout umgeleitet und anschliessend stdout nach a. Allerdings wird hier stderr nicht nochmals umgeleitet. Das kannst Du leicht mit Hilfe des folgenden Scripts überprüfen:
Code:
echo "ich bin stdout" echo "ich bin stderr" >&2
-- Gruß, virtual Quote of the Month Ich eß' nur was ein Gesicht hat (Creme 21)Dieser Post wurde am 02.09.2005 um 11:06 Uhr von virtual editiert.