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.
open-files
rubixibuc
quelle
quelle
Antworten:
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/x
bieten 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.quelle