Soweit ich verstehe Ihre Frage ist es, warum sich nichts ändert, wenn Sie von Datei-Deskriptoren 0, 1, lesen 0 2.
In einem normalen Programm der Dateideskriptor stdin ist, 1 stdout und 2 ist stderr . stdin ist, wo Sie Ihre Eingabe lesen sollten, 1 ist, wo Sie Ihre Ausgabe schreiben sollten und 2 ist, wo Sie Ihre Fehlermeldungen schreiben sollten.
Es ist nicht ungewöhnlich, dass alle drei Dateideskriptoren hinter den Kulissen auf dieselbe zugrunde liegende Datei zeigen (eine Datei kann auch die Konsole, Netzwerkverbindung usw. sein). Wenn Sie Ihr Programm nur über die Befehlszeile ausführen, ist dies sehr wahrscheinlich. In diesem Fall können Sie möglicherweise alle von ihnen lesen und das exakt gleiche Ergebnis erhalten.
Aber. Dann entscheiden Sie, dass Sie die Ausgabe des Programms in einer Datei speichern und es wie folgt ausführen möchten: program > output
. Jetzt zeigt der Dateideskriptor 1 nicht mehr auf die gleiche Datei wie stdin und Ihr Programm würde brechen. Das gleiche passiert, wenn Sie stderr auf eine Fehlerprotokollierungsfunktion zeigen. Oder holen Sie sich die Eingabe aus einer Datei oder einer Pipe. Oder führen Sie das Programm in einigen Debuggern aus. Oder ein anderes Terminal. Deshalb sollten Sie nur von 0 und keinen anderen Dateideskriptoren lesen, auch wenn Sie manchmal damit durchkommen.
Wissen Sie, was die fd 0, 1, 2 bedeutet? –
"im Grunde das Gleiche" - Was macht es? Tut es, was Sie erwarten? –
Er meint Dateideskriptor denke ich. –