Was ist der standardmäßig zugewiesene Dateideskriptor 3?

19
$ ls -og /proc/self /proc/self/fd
lrwxrwxrwx 1 64 Jun 18 11:12 /proc/self -> 32157

/proc/self/fd:
total 0
lrwx------ 1 64 Jun 22  2012 0 -> /dev/tty1
lrwx------ 1 64 Jun 22  2012 1 -> /dev/tty1
lrwx------ 1 64 Jun 22  2012 2 -> /dev/tty1
lr-x------ 1 64 Jun 22  2012 3 -> /proc/32157/fd

Was ist der standardmäßig zugewiesene Dateideskriptor 3?

musiphil
quelle

Antworten:

34

Nichts: Es gibt drei Standarddateibeschreibungen: STDIN, STDOUT und STDERR. Sie sind jeweils mit 0, 1 und 2 belegt.

Was Sie dort sehen, ist ein Artefakt der Funktionsweise ls(1): Um den Inhalt des /proc/self/fdVerzeichnisses zu lesen und anzuzeigen, muss dieses Verzeichnis geöffnet werden.

Das bedeutet, dass es ein Datei-Handle erhält, normalerweise das erste, das verfügbar ist ... also 3.

Wenn Sie beispielsweise catauf einer separaten Konsole ausführen und /proc/${pid}/fddanach suchen, werden Sie feststellen, dass nur die ersten drei zugewiesen wurden.

Daniel Pittman
quelle
Ah, das erklärt das Ergebnis, einschließlich der Tatsache, dass es ebenfalls darauf 3hinweist /proc/32157/fd. (Warum habe ich das vermisst?) Danke!
Musiphil