Was ist der Unterschied zwischen Inode-Nummer und Dateideskriptor?

9

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.

    
rgaut 13.09.2014, 02:19
quelle

2 Antworten

9

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.

    
user2864740 13.09.2014 02:23
quelle
2

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:

%Vor%

Siehe OPEN(2) Es erklärt, was unter der Oberfläche passiert, wenn Sie open aufrufen.

    
direprobs 11.08.2017 11:09
quelle