Ich habe festgestellt, dass wir hauptsächlich 3 Dateiströme haben. Sie sind STDIN, STDOUT und STDERR. Meine Frage ist, warum STDERR zu STDOUT umgeleitet wird?Warum wird STDERR auf STDOUT umgeleitet
Antwort
stderr
wird nicht zu stdout
umgeleitet. Beide Streams sind standardmäßig nur mit demselben Gerät (dem aktuellen Bildschirm oder Terminal) verbunden.
Sie können sie umleiten auf verschiedene Dateien:
$ command > stdout.log 2> stderr.log
Um tatsächlich stderr
zu stdout
zu umleiten, müssen Sie erteilen:
$ command 2>&1
Wie stdout
wird stderr
in der Regel an den Ausgang gerichtet Gerät der Standardkonsole (in der Regel der Bildschirm). Das heißt, stderr
wird nicht zu stdout
umgeleitet, aber sie teilen einen gemeinsamen Dateideskriptor. Es ist möglich, stderr
von einem Programm aus über die Funktion freopen an ein anderes Ziel umzuleiten.
Es ist nicht; Es passiert einfach, dass sowohl stdout als auch stderr normalerweise auf den gleichen Ausgabestrom (normalerweise die Konsole) abgebildet werden. Wenn Sie beispielsweise stdout in eine Datei umleiten, werden Sie feststellen, dass stderr an die Konsole weitergeleitet wird.
Der wichtige Punkt ist, dass sie unabhängig umleitbar sind.
Nun, technisch teilen sie nicht einmal einen Dateideskriptor: 'stdout' ist' fd1' und 'stderr' ist' fd2'. –
Fd von stdout ist 1 und fd os stderr ist 2 dann wie können sie fd teilen? – user559208
@ user559208, sie nicht. Jeder hat seinen eigenen Dateideskriptor. –