Ich verstehe, dass Dateideskriptoren Kernel-Handle sind, um die Datei zu identifizieren, während Inode-Nummer einer Datei Zeiger auf eine Struktur ist, die andere Details über Datei hat (Korrigiere mich, wenn ich falsch liege). Aber ich kann den Unterschied nicht unterscheiden.
Ein Inode ist ein Artefakt eines bestimmten Dateisystems und wie es die Indirektion verwaltet. Ein "traditionelles * ix" -Dateisystem verwendet dies, um Dateien in Verzeichnisse und sogar mehrere Teile einer Datei miteinander zu verknüpfen. Das heißt, ein Inode repräsentiert eine physische Manifestation der Dateisystemimplementierung .
Andererseits ist ein Dateideskriptor ein undurchsichtiger Bezeichner für eine offene Datei durch den Kernel. Solange die Datei geöffnet bleibt, kann diese Kennung zum Ausführen von Operationen wie Lesen und Schreiben verwendet werden. Die Verwendung von "Datei" ist hier nicht , um mit einer allgemeinen "Datei auf einer Platte" verwechselt zu werden - vielmehr stellt eine Datei in diesem Kontext einen Stream und Operationen dar, die unabhängig von der Datei ausgeführt werden können Quelle.
Ein Dateideskriptor ist nicht für einen Inode, außer dass er intern von einem bestimmten [Dateisystem] -Treiber verwendet werden kann.
Der Unterschied ist nicht wesentlich, beide beziehen sich auf den abstrakten Begriff "Datei". Ein Inode ist eine Dateisystemstruktur, die Dateien darstellt. Ein Dateideskriptor ist eine Ganzzahl, die von open
syscall zurückgegeben wird. Per Definition:
Dateien werden durch Inodes dargestellt. Der Inode einer Datei ist eine vom Dateisystem verwaltete Struktur, die Informationen über eine Datei enthält, wie Typ, Besitzer, Berechtigungen, Anzahl der Inode-Links usw.
Auf der anderen Seite ein Dateideskriptor
Dateideskriptoren : Der von einem
open
-Aufruf zurückgegebene Wert wird als Dateideskriptor bezeichnet und ist im Wesentlichen ein Index in ein Array offener Dateien, die vom Kernel verwaltet werden.
Der Kernel stellt offene Dateien nicht nach ihren Namen dar, sondern verwendet ein Array von Einträgen für offene Dateien für jeden Prozess, so dass ein Dateideskriptor in Wirklichkeit ein Index in ein Array offener Dateien ist. Angenommen, Sie führen die folgende Operation in einem Prozess aus:
%Vor%0 bezeichnet die Datei-Deskriptor-Nummer und 10 zum Lesen von 10 Bytes. In diesem Fall fordert der Prozess 10 Bytes von der Datei / dem Stream in Index 0 an, das ist stdin. Der Kernel gewährt jedem Prozess automatisch drei offene Streams:
%Vor%Diese Deskriptoren werden Ihnen vom Kernel kostenlos zur Verfügung gestellt.
Nun, wenn Sie eine Datei öffnen, im Prozess über open("/home/myname/file.txt")
syscall, haben Sie den Index 3 für die neu geöffnete Datei, Sie öffnen eine andere Datei, Sie erhalten den Index 4 und so weiter. Dies sind die Deskriptoren der geöffneten Dateien im Prozess:
Siehe OPEN(2)
Es erklärt, was unter der Oberfläche passiert, wenn Sie open
aufrufen.
Tags und Links filesystems file-descriptor inode