Linking for Programmers

Eine Verbindung ist eine Verbindung zwischen einem Dateinamen und einem I-Node (feste Verbindung) oder zwischen Dateinamen (symbolische Verbindung).

Die Verknüpfung ermöglicht den Zugriff auf einen I-Node über mehrere Dateinamen. Verzeichniseinträge verbinden Dateinamen mit I-Nodes. Dateinamen sind für Benutzer leicht zu identifizieren und I-Nodes enthalten die realen Plattenadressen der Dateidaten. Eine Referenzanzahl aller Links zu einem I-Node wird im Feld i_nlink des I-Node verwaltet. Subroutinen, die Links erstellen und löschen, verwenden Dateinamen, nicht Dateideskriptoren. Daher ist es nicht erforderlich, Dateien zu öffnen, wenn ein Link erstellt wird.

Prozesse können über einen beliebigen verlinkten Dateinamen auf den Inhalt des I-Nodes zugreifen und diesen ändern. AIX® unterstützt harte Links und symbolische Links.

Feste Verbindungen

Subroutine Beschreibung
Link Subroutine, die feste Verbindungen erstellt. Das Vorhandensein einer festen Verbindung garantiert das Vorhandensein einer Datei, da eine feste Verbindung die Anzahl der Verbindungen im Feld i_nlink des I-Node erhöht.
Verbindung aufheben Subroutine, die Links freigibt. Wenn alle festen Verbindungen zu einem I-Node freigegeben werden, ist die Datei nicht mehr zugänglich.

Feste Verbindungen müssen Dateinamen und I-Nodes innerhalb desselben Dateisystems verbinden, da die I-Node-Nummer relativ zu einem Dateisystem ist. Feste Verbindungen verweisen immer auf eine bestimmte Datei, da der Verzeichniseintrag, der durch die feste Verbindung erstellt wird, den neuen Dateinamen zu einem I-Node verbindet. Die Benutzer-ID, die die ursprüngliche Datei erstellt hat, ist Eigner der Datei und behält die Berechtigung für den Zugriffsmodus für die Datei bei. Andernfalls werden alle festen Verbindungen vom Betriebssystem gleich behandelt.

Beispiel: Wenn die Datei /u/tom/bob mit der Datei /u/jack/foo verknüpft ist, lautet die Linkanzahl im Feld i_nlink der Datei foo2. Beide festen Verbindungen sind gleich. Wenn /u/jack/foo entfernt wird, ist die Datei weiterhin mit dem Namen /u/tom/bob vorhanden und Benutzer mit Zugriff auf das Verzeichnis tom können darauf zugreifen. Der Eigner der Datei ist jedochjackobwohl /u/jack/foo entfernt wurde. Der von der Datei belegte Speicherbereich wird dem Kontingentkonto von Jack belastet. Verwenden Sie zum Ändern des Dateieigentumsrechts die Subroutine chown .

Symbolische Verbindungen

Symbolische Links werden mit dem Befehl symlink als Datei implementiert, die einen Pfadnamen enthält. Wenn ein Prozess auf einen symbolischen Link trifft, wird der in dem symbolischen Link enthaltene Pfad dem Pfad vorangestellt, den der Prozess durchsucht hat. Wenn der Pfadname in der symbolischen Verbindung ein absoluter Pfadname ist, sucht der Prozess im Stammverzeichnis nach der benannten Datei. Wenn der Pfadname in der symbolischen Verbindung nicht mit einem Schrägstrich (/) beginnt, interpretiert der Prozess den Rest des Pfads relativ zur Position der symbolischen Verbindung. Die Subroutine unlink entfernt auch symbolische Verbindungen.

Symbolische Verbindungen können Dateisysteme durchqueren, weil sie vom Betriebssystem als reguläre Dateien und nicht als Teil der Dateisystemstruktur behandelt werden. Das Vorhandensein einer symbolischen Verbindung garantiert nicht das Vorhandensein der Zieldatei, da eine symbolische Verbindung keine Auswirkung auf das Feld i_nlink des I-Nodes hat.

Subroutine Beschreibung
Readlink Subroutine, die den Inhalt einer symbolischen Verbindung liest Viele Subroutinen (einschließlich der Subroutinen open und stat ) folgen symbolischen Pfaden.
lstat Subroutine erstellt, um den Status der Datei zu melden, die die symbolische Verbindung enthält, und folgt nicht der Verbindung. Eine Liste der Subroutinen, die symbolische Links durchlaufen, finden Sie in der Beschreibung der Subroutine symlink .

Symbolische Links werden auch als Softlinks bezeichnet, da sie mit einer Datei nach Pfadnamen verknüpft sind. Wenn die Zieldatei umbenannt oder entfernt wird, kann der symbolische Link nicht aufgelöst werden.

Beispiel: Der symbolische Link zu /u/joe/foo ist eine Datei, die die Literaldaten /u/joe/fooenthält. Wenn der Eigner der foo -Datei diese Datei entfernt, können Subroutinenaufrufe an die symbolische Verbindung nicht erfolgreich sein. Wenn der Dateieigner dann eine neue Datei mit dem Namen foo im selben Verzeichnis erstellt, führt der symbolische Link zur neuen Datei. Daher wird der Link als weich betrachtet, da er mit austauschbaren I-Nodes verknüpft ist.

In der Auflistung des Befehls ls -l wird einlan der ersten Position gibt eine verknüpfte Datei an. In der letzten Spalte dieser Liste werden die Links zwischen Dateien alsPath2 -> Path1(oder Newname -> Oldname).

Subroutine Beschreibung
Entfernen Subroutine, die auch einen Dateinamen entfernt, indem sie entweder die Subroutine unlink oder rmdir aufruft.

Verzeichnislinks

Subroutine Beschreibung

Symbolische Links werden empfohlen, um zusätzliche Links zu einem Verzeichnis zu erstellen. Symbolische Verbindungen beeinträchtigen die nicht. und .. Verzeichniseinträge und verwalten den leeren, korrekt formatierten Verzeichnisstatus. Das folgende Beispiel zeigt das leere, korrekt formatierte Verzeichnis /u/joe/foo und die Werte für i_nlink .

/u
Werte leere Werte leere Werte Verzeichnis
68     j o e 0
/u/joe
mkdir ("foo", 0666)
Werte leere Werte leere Werte Verzeichnis
68     n 0 0 0
      n n 0 0
235     f o o 0

 

/u/joe/foo
Werte leere Werte leere Werte Verzeichnis
235     n 0 0 0
68     n n 0 0
i_nlink Values

 i = 68

N_Link 3

Für i = 68 ist der Wert für n_link 3 (/u; /u/joe; /u/joe/foo).

i = 235

N_Link 2

Für i = 235 ist der Wert für n_link 2 (/u/joe; /u/joe/foo).