Alle vier /dev/fd/0
, /dev/stdin
, /proc/self/fd/0
und /dev/pts/2
sind Dateinamen, wie sind /////dev/../dev/fd//0
, /bin/sh
, /etc/fstab
, /fioejfoeijf
, etc. Alles , aber das letzte Beispiel sind wahrscheinlich der Name einer vorhandenen Datei auf Ihrem Computer sein. Ein Dateiname ist eine Zeichenfolge, die eine Datei in Ihrem Dateisystem festlegen kann. Unter Linux ist jede Zeichenfolge, die kein Null-Byte enthält und höchstens 4096 Byte lang ist, ein gültiger Dateiname. Viele dieser Namen sind gleichwertig, zB /bin/sh
entspricht ///bin/sh
, /bin/../bin/sh
(vorausgesetzt , /bin
ein bestehendes Verzeichnis wird) usw. Alle Beispiele , die ich gegeben habe , so weit sind absolute Dateinamen; Es gibt auch relative Dateinamen, die nicht mit a beginnen /
und deren Bedeutung vom aktuellen Verzeichnis abhängt.
Die Terminologie für Dateinamen ist nicht universell. Manchmal bedeutet "Dateiname" einen vollständigen Pfad zu einer Datei, und manchmal bedeutet es den Namen eines Verzeichniseintrags. Die POSIX-Terminologie lautet " Dateiname " oder " Pfadname-Komponente " für den Namen eines Verzeichniseintrags und " Pfadname " für einen vollständigen Pfad.
Ein Dateideskriptor bezeichnet eine geöffnete Datei in einem bestimmten Prozess. Der Kernel verwaltet für jeden Prozess eine Tabelle mit Dateideskriptoren. Jeder Eintrag in der Dateideskriptortabelle gibt an, was zu tun ist, wenn der Prozess Lese-, Schreib- und andere Vorgänge für den Dateideskriptor anfordert.
Dateideskriptoren entsprechen möglicherweise einer Datei und haben einen zugeordneten Namen, aber nicht alle. Für diejenigen, die dies tun, kann die Datei eine reguläre Datei, ein Verzeichnis, eine Gerätedatei oder eine Named Pipe (auch FIFO genannt) sein (die Art, die von erstellt wurde mkfifo
); Einige Systeme bieten weitere Möglichkeiten wie Unix-Sockel und Türen. Beispiele für Dateibeschreibungen , die nicht enthalten eine zugehörige Datei mit dem Namen haben Rohre (die Art von der erstellt pipe
) und Netzwerk - Sockets .
/dev/fd/0
, /dev/stdin
Und /proc/self/fd/0
sind Dateinamen (all - Äquivalent) mit einer besonderen Bedeutung: sie alle designierten je nachdem welche Datei gerade über Dateideskriptor zugegriffen wird 0. Wenn ein Verfahren zur Herstellung dieser geöffnet wird, die Kernel - Kopien der Eintrag mit dem Index 0 in dem Dateideskriptor Deskriptortabelle zu einem neuen Deskriptor. Das Öffnen einer dieser Dateien entspricht dem Aufrufen dup(0)
. Die genannten Dateien sind eine Möglichkeit, einen Prozess indirekt dazu zu bringen, eine seiner bereits geöffneten Dateien zu verwenden, anstatt eine neue Datei zu öffnen. Sie sind meistens nützlich, um die Befehlszeile eines Programms weiterzuleiten, in der das Programm erwartet, dass der Name einer Datei geöffnet wird.