Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : stderr und stdout



mips
24-10-2002, 22:18
"Fehlrausgaben sind auf stderr zu schreiben" ?
ob man jetzt fprintf(stdout oder stderr, schreibt es landet ja beides auf der shell??

micha
24-10-2002, 22:55
Hi,

wenn Du alles auf die Standardausgabe gibst, dann kann man zwischen Fehlermeldungen und normalen Ausgaben nicht mehr unterscheiden, wodurch z.B. folgender Befehl nicht mehr die gewünschte Wirkung hat:



./dein_program 2> fehler.txt


Gruß micha

mips
24-10-2002, 23:07
die standardausgabe ist die normale schwarze shell richtig?
und wenn ich es mit stderr ausprinte landets auch auf der shell-weder mit formatierung noch sonst einem unterschied
also woran soll man einen unterschied sehen??

micha
24-10-2002, 23:15
Was für ne schwarze Shell ?
Standard- und Standardfehlerausgabe werden von der Shell zunächst mal zusammen ausgegeben. Man hat aber die Möglichkeit beide zu trennen. Das obige Beispiel leitet alle Fehlermeldungen in die Datei fehler.txt. Wenn Du jetzt die ganzen Fehlermeldungen auf stdout ausgibst, wird da nachher nichts drinstehn ...

siehe auch: http://www.linuxfibel.de/eaumleitung.htm

Gruß micha

anda_skoa
25-10-2002, 09:15
Außerdem ist stderr meistens ungepuffert.
Es wird also auch Text rausgechrieben, der nicht mit newline endet, ohne dass man extra flushed.

Ciao,
_

peschmae
25-10-2002, 11:18
@mips

Was für ne schwarze Shell ? meine ist aber weiss :D

MfG Peschmä

mips
25-10-2002, 12:15
also wenn ich mein programm so ausführe programm > fehler.txt
dann wird genau alles was mit stdout ausgegeben wird in fehler.txt geschrieben
und alles was mit stderr ausgegeb wird auf die shell
also genau umgekehrt als von micha beschrieben

anda_skoa
25-10-2002, 12:51
Original geschrieben von mips
also wenn ich mein programm so ausführe programm > fehler.txt
dann wird genau alles was mit stdout ausgegeben wird in fehler.txt geschrieben
und alles was mit stderr ausgegeb wird auf die shell
also genau umgekehrt als von micha beschrieben

Nein, micha hat schon recht.
Wenn du es umgekehrt machst, verhält es sich auch umgekehrt :)

Ciao,
_

peschmae
25-10-2002, 12:57
imho nicht, denn er sagt ja

Das obige Beispiel leitet alle Fehlermeldungen in die Datei fehler.txt. Wenn Du jetzt die ganzen Fehlermeldungen auf stdout ausgibst, wird da nachher nichts drinstehn ...

und es ist ja gerade umgekehrt, oder?

MfG Peschmä

@anda_skoa der NichtLesenKönnen-Virus zieht weite kreise :D, entweder bei mir oder bei dir :confused:

mips
25-10-2002, 13:38
also zusammenfassend stderr ausgaben landen immer auf der shell
stdout in einer datei wenn explicit angegeben

The Ripper
25-10-2002, 14:53
nein, weder stdout noch stderr-ausgaben landen immer auf der shell, wo die ausgaben landen, was damit gemacht wird und ob sie überhaupt erscheinen liegt (bei sauber geschriebenen programmen) ganz im ermessen des benutzers:
befehl > ausgabe.txt # leitet stdout in die datei ausgabe.txt um
befehl 2> fehler.txt # leitet stderr in die datei fehler.txt um, man beachte die 2 vor dem grösser-als-zeichen!

anda_skoa
25-10-2002, 14:55
Original geschrieben von peschmae
@anda_skoa der NichtLesenKönnen-Virus zieht weite kreise :D, entweder bei mir oder bei dir :confused:

:)

Micha's Beispiel leitet den stderr in eine Datei fehler.txt um.
Wenn das Programm nun alle Fehler auf stdout ausgibt, kommt ja nix auf stderr, darum ist dann auch die Datei fehler.txt leer.

Ciao,
_

peschmae
25-10-2002, 15:07
ok, bei mir, mir ist die 2 irgendwie durch den lappen gegangen ;)

MfG Peschmä