/ dev / fd / 3 scheint auf den aktuellen Prozess zu verweisen.
Dh ls
selbst (beachten Sie, dass pid danach nicht mehr existiert). Alle diese beziehen sich tatsächlich auf den aktuellen Prozess, da Dateideskriptoren nicht global sind. Es gibt nicht nur eine einzige 0, 1 und 2 für das gesamte System - es gibt eine separate 0, 1 und 2 für jeden Prozess.
Wie Frederik Dweerdt bemerkt, /dev/fd
ist ein Symlink. Wenn Sie Ihre ls
von verschiedenen Terminals wiederholen , werden Sie Links zu verschiedenen ptys bemerken. Diese stimmen mit der Ausgabe des tty
Befehls überein .
Im ls
Beispiel würde ich mir vorstellen, dass Deskriptor 3 derjenige ist, der zum Lesen des Dateisystems verwendet wird. Einige C-Befehle (z. B. open()
), die die Generierung von Dateideskriptoren unterstützen, garantieren die Rückgabe des "nicht verwendeten Dateideskriptors mit der niedrigsten Nummer" ( POSIX - beachten Sie, dass open () auf niedriger Ebene tatsächlich nicht Teil von Standard C ist). Sie werden also nach dem Schließen recycelt (wenn Sie verschiedene Dateien wiederholt öffnen und schließen, erhalten Sie immer wieder 3 als fd).
Wenn Sie einen Hinweis darauf erhalten möchten, wie sie entstehen, finden Sie hier einen Ausschnitt aus C-Code opendir()
, den Sie wahrscheinlich in der Quelle für ls finden:
// open directory for reading
DIR *dh = opendir(".");
// print the fd of the directory handle to standard out:
printf("fd: %d\n", dirfd(dh));
closedir(dh);
Führen Sie es so aus, wie es ist. Der fd ist 3, da dies der niedrigste nicht verwendete Deskriptor ist (0, 1 und 2 sind bereits vorhanden).
close(0)
.open()
verwendet den ersten kostenlosen Dateideskriptor. Die aufrufende Anwendung sollte sich nicht um ihre Nummer kümmern. Deshalb wird es vom Anruf zurückgegeben.Unter Archlinux
/dev/fd
ist ein Symlink zu/proc/self/fd
. Was Sie sehen, ist dasfd
Verzeichnis Ihresls
Befehls. Und dieser Befehl öffnete tatsächlich das Verzeichnis als Dateideskriptor 3.EDIT: Übrigens, ein guter Weg, um zu verstehen, was los ist, ist zu verwenden
strace
. Sie sehen, wie der Prozess die Dateideskriptoren öffnet.quelle