Dateideskriptoren und / dev / fd

7

Sind Dateideskriptoren prozessübergreifend oder systemweit eindeutig? Weil jede Datei den gleichen Deskriptor für stdin und stdout zu verwenden scheint. Gibt es etwas Besonderes an diesen? Wie funktionieren stdin und stdout? Mir ist klar dev/fd, ist ein Link zu proc/self/fd, aber wie haben sie alle die gleiche Nummer?

Bearbeiten: Auch nach Betrachtung anderer Prozesse haben die meisten Dateideskriptoren ungefähr die gleichen Zahlen.

rubixibuc
quelle
1
Siehe auch unix.stackexchange.com/questions/24145/… und andere Fragen, die mit Dateideskriptoren gekennzeichnet sind .
Gilles 'SO - hör auf böse zu sein'

Antworten:

7

Einige Dinge könnten hier verwirrend sein.

Dateiskriptoren werden an eine Datei angehängt (im allgemeinen Sinne) und sind für einen bestimmten Prozess spezifisch. Dateiskriptoren werden selbst durch den zugehörigen Prozess über numerische IDs referenziert, aber ein Dateideskriptor kann mehrere IDs haben. Beispiel: Die IDs 1 und 2, die als Standardausgabe und Standardfehler bezeichnet werden, beziehen sich normalerweise auf denselben Dateideskriptor.

Die Symlinks /proc/pid/fd/xbieten nur einen Hinweis für das, was die x FileDescriptor der Prozess pid verknüpft ist. Wenn es sich um eine reguläre Datei handelt, gibt der Symlink seinen Pfad an. Wenn der Filedescriptor jedoch z. B. ein Inet-Socket ist, ist der Symlink nur unterbrochen. Im Fall einer regulären Datei (oder einer Datei mit einem Pfad wie einem tty) ist es möglich, sie zu öffnen, aber Sie würden einen anderen Dateideskriptor für dasselbe Objekt erhalten.

Stéphane Gimenez
quelle