Readlink C -Funktion

Readlink C -Funktion

Mit der Readlink () -Funktion der C -Programmiersprache wird die Informationen des symbolischen Links, der sich auf einen Pfad bezieht, in den Puffer einfügen. Das Lesen des Inhalts eines symbolischen Links wird als "Lesen eines Links" oder "Readlink" bezeichnet. Der verbleibende Inhalt des Puffer. In diesem Artikel werden wir einige Beispiele erörtern, um die Arbeit der Readlink C -Funktion im Kali Linux -System zu veranschaulichen. Die Syntax der Readlink -Funktion wird wie folgt angegeben:

Die Funktion readlink () findet sich in der Header -Datei . Diese Header -Datei muss über der Hauptfunktion in der Codedatei enthalten sein. Der Puffer enthält nach dem Ergebnis kein Nullzeichen.

#enthalten
  • SSIZE_T Readlink (const char *link_restrict_Pfadname, char *einschränken Puffer,
      • size_t Puffergröße);

Der Wert des symbolischen Links wird verkürzt, um in den Puffer zu passen, wenn er zu kurz ist, um ihn in seiner Gesamtheit zu halten (Buffer_Size). Die anfänglichen Bytes der Puffergröße müssen dem Puffer hinzugefügt werden, falls das Pufferargument nicht groß genug ist, um den Link -Inhalt zu halten. Wenn die Puffergröße größer als die Größe max ist, ist das Ergebnis implementiert definiert. Die Anzahl der im Puffer geladenen Bytes wird zurückgegeben, wenn Readlink () erfolgreich ausgeführt wird. Andernfalls muss es -1 zurückgeben und Errno festlegen, um den genauen Fehler zu identifizieren und den Puffer unmodifiziert zu lassen. Hier ist die Liste der Fehlerbeschreibungen zusammen mit dem Code:

  • Einval: In der benannten Datei gibt es keinen symbolischen Link.
  • EIO: Das Lesen aus dem Dateisystem führte zu einem Eingangs- oder Ausgabefehler.
  • Leacces: Ein Element des Pfadpräfixs hat keine Suchgenehmigung.
  • Eloop: In symbolischen Verknüpfungen gibt es eine Schleife. Bei der Auflösung des Pfadarguments wird dieser Fehler angesprochen, wenn mehr als posix symloop symbolische Links gefunden werden.
  • Enoent: Es gibt keine Datei wie den benannten Link.

Bewerten wir die Funktion readlink () in einigen Beispielen. Erstellen Sie eine C -Programmierdatei im Linux -Terminal mit dem VIM -Editor. Sie können Nano oder einen anderen Editor verwenden, um die Datei zu erstellen.

Alle Header -Dateien sind im folgenden Code vor der Hauptfunktion enthalten. In der ersten Zeile des Hauptblocks wird die Struktur „Stat“ deklariert. Danach wird ein Zeiger des Zeichenstyps deklariert, der später in der Funktion readlink () verwendet wird. Wir verwenden SSIZE_T anstelle eines Ganzzahl -Datentyps. Es ist ein signierter Typ. Ihre maximalen Werte sind daran gebunden, ob das Betriebssystem 32-Bit oder 64-Bit ist. Wir haben zwei Variablen dieses Datentyps deklariert: Buffer_size und NBYTES (Anzahl der Bytes).

In der nächsten Codezeile haben wir die Anzahl der Argumente überprüft, die aus der Befehlszeile zur Hauptfunktion geliefert wurden. Wenn dies nicht gleich 2 ist, beendet das Programm mithilfe der EXIT -Funktion aus der Hauptfunktion, in der auch eine Fehlermeldung angezeigt wird. In dem von Puffer verwiesenen Speicherort wird die Statusinformationen für eine bestimmte Datei gespeichert, nachdem sie von der Funktion lstat () erhalten wurden. Wenn der Dateiname der symbolische Link ist, gibt diese Funktion die Details zum symbolischen Link selbst zurück. Die von der LSTAT -Funktion zurückgegebenen Informationen erfolgen in Form einer Stat -Struktur, auf die durch einen Puffer verwiesen wird.

Die Statusdaten für eine bestimmte Datei werden von der Funktion lstat () erfasst und in der Speicheradresse platziert, auf die vom Puffer vermerkt ist. Diese Methode liefert Informationen über den symbolischen Link selbst, wenn der Dateiname der symbolische Link ist. Die Daten, die die LSTAT -Funktion zurücksetzt. Wir haben die Puffergröße um eins erhöht.

In einigen Fällen ist die gemeldete Größe Null, die durch den symbolischen Glied zurückgegeben wird. Setzen Sie in dieser Situation die Puffergröße auf den path_max -Wert. Stellen Sie den Puffer mithilfe der Speicherzuweisung ein, die die Puffer_Size verwendet. Überprüfen Sie, ob der Puffer null ist. Zeigen Sie dann eine Fehlermeldung an. Rufen Sie die Readlink -Funktion auf und übergeben Sie den Pfad des Lesel -Links, des Puffers und der Buffer_Size an diese Funktion. Die Funktion gibt zurück, wie viele Bytes auf dem Weg zurückgegeben wurden. Wenn die Anzahl der Bytes -1 beträgt, anzeigen Sie den Fehler an, sonst anzeigen Sie den Punktspeicherort der verknüpften Datei an. Dann befreien Sie den Puffer.

Kompilieren Sie die C -Datei mit dem GCC -Compiler. Der Readlink.Die OUT -Datei enthält das Ergebnis der Datei.

In der ersten Ausführung übergibt es den Verzeichnisnamen, der nicht der symbolische Link ist. Daher gibt es einen Fehler, dass es keine solche Datei oder Verzeichnis gibt.

Im Folgenden haben wir das Stammverzeichnis übergeben, das ein ungültiges Argument ist.

Nachdem wir den Pfad übergeben haben, gibt die Readlink -Funktion den Namen des symbolischen Links zurück, auf den sie zeigt.

Verwenden wir eine C -Datei, um eine Datei und einen symbolischen Link dazu zu erstellen. Wir haben einen Dateinamen und einen symbolischen Link in der Hauptfunktion erstellt. Erstellen Sie die Datei mit dem S IWUSER -Switch mit der Funktion erstellen. Ein neuer harter Link kann mit der Link () -Methode der C -Bibliothek eine vorhandene Datei mit der C -Bibliotheksmethode hergestellt werden. Verwenden Sie zum Erstellen eines Soft Links die Symlink () -Methode. Es wird nicht überschrieben, wenn bereits die Linkdatei oder der Link -Pfad vorhanden sind. Bei erfolgreicher Funktionen links () und symlink () kehren beide 0 zurück.

Verwenden Sie den GCC -Compiler, um den Code zu kompilieren, und speichern Sie die Ergebnisse im Readlink1.aus der Datei.

Führen Sie den Code aus. Hier ist die Ausgabe:

Abschluss:

Hier geht. Wir haben nach seiner Verwendung, ihrer Syntax und den Fehlern, die sie in einigen der Beispiele enthält.