2017-08-08 4 views
0

Ich habe difficulity Verständnis die read Funktion in C.C read() Funktion Schwierigkeiten zu verstehen, Dateideskriptors

len = read(fd, buf, 32); 

wenn ich fd als 0,1,2 zuweisen und das Programm ausführen, tut sie im Grunde der Dasselbe kann mir jemand sagen, welchen Unterschied das macht?

+0

Wissen Sie, was die fd 0, 1, 2 bedeutet? –

+2

"im Grunde das Gleiche" - Was macht es? Tut es, was Sie erwarten? –

+0

Er meint Dateideskriptor denke ich. –

Antwort

1

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.

2

read() versucht, Bytes aus Dateideskriptor fd zu zählen.

fd = 0 
fd = 1 
fd = 2 

Liest von verschiedenen Dateideskriptoren. Der Unterschied besteht darin, dass Sie aus verschiedenen Dateien lesen und die in den Puffer eingelesenen Daten unterschiedlich sind.

Was ist der Unterschied beim Lesen von Book A und Lesen von Book B? Es ist der gleiche Prozess, ein Buch zu lesen ... es ist der Inhalt, der sich ändert.

+0

Verschiedene Dateideskriptoren können sich auf die gleiche Datei beziehen –

+0

warten .. wenn ich es auf cmd laufen, und fragt nach Eingabe, welches "Buch" ist das? Entschuldigung, ich bin ein Neuling in dieser Sache, ich mache nur wettbewerbsfähige Programmierung ... –

+0

@ 眠 り ネ ロ ク wahr, aber lassen Sie uns davon ausgehen, dass es andere Dateien ist. –

Verwandte Themen