Subroutine readlink oder readlinkat
Zweck
Liest den Inhalt einer symbolischen Verbindung.
Bibliothek
Standard-C-Bibliothek (libc.a)
Syntax
int readlink ( Path, Buffer, BufferSize)
const char *Path;
char *Buffer;
size_t BufferSize;
int readlinkat ( DirFileDescriptor, Path, Buffer, BufferSize )
int DirFileDescriptor;
const char * Path;
char * Buffer;
size_t BufferSize;
Beschreibung
Die Unterprogramme readlink und readlinkat kopieren den Inhalt des durch den Path-Parameter benannten symbolischen Links in den im Buffer-Parameter angegebenen Puffer. Der Parameter BufferSize gibt die Größe des Puffers in Bytes an. Wenn die tatsächliche Länge des symbolischen Links kleiner als die Anzahl der Byte ist, die im Parameter BufferSize angegeben ist, wird die in den Puffer kopierte Zeichenfolge auf null beendet. Wenn die tatsächliche Länge des symbolischen Links größer als die im Parameter Puffergröße angegebene Anzahl Byte ist, wird ein Fehler zurückgegeben. Die Länge eines symbolischen Links darf 1023 Zeichen oder den Wert der Konstante PATH_MAX nicht überschreiten. PATH_MAX ist in der Datei limits.h definiert.
Das Unterprogramm readlinkat entspricht dem Unterprogramm readlink, wenn der Parameter DirFileDescriptor AT_FDCWD ist oder Path ein absoluter Pfadname ist. Wenn DirFileDescriptor ein gültiger Dateideskriptor eines geöffneten Verzeichnisses und Path ein relativer Pfadname ist, wird Path als relativ zu dem Verzeichnis betrachtet, das mit dem DirFileDescriptor verbunden ist, und nicht als relativ zum aktuellen Arbeitsverzeichnis.
Wenn DirFileDescriptor ohne das Open-Flag O_SEARCH geöffnet wurde, prüft das Unterprogramm anhand der aktuellen Berechtigungen des Verzeichnisses, ob eine Verzeichnissuche für dieses Verzeichnis erlaubt ist. Wenn das Verzeichnis mit dem Open-Flag O_SEARCH geöffnet wurde, führt das Unterprogramm die Prüfung für dieses Verzeichnis nicht durch.
Parameter
| Element | Beschreibung |
|---|---|
| DirFileDescriptor | Gibt den Dateideskriptor eines geöffneten Verzeichnisses an. |
| Pfad | Gibt den Pfadnamen der Zieldatei oder des Zielverzeichnisses an Wenn DirFileDescriptor angegeben ist und Path ein relativer Pfadname ist, dann wird Path als relativ zu dem von DirFileDescriptor angegebenen Verzeichnis betrachtet. |
| Puffer | Verweist auf den Benutzerpuffer. Der Puffer sollte mindestens so groß sein wie der Parameter BufferSize . |
| BufferSize | Gibt die Größe des Puffers an Der Inhalt des Links ist auf null endend, vorausgesetzt, im Puffer ist Platz. |
Rückgabewerte
Nach erfolgreichem Abschluss geben die Unterprogramme readlink und readlinkat die Anzahl der in den Puffer eingefügten Zeichen zurück (ohne abschließende Nullzeichen). Wenn das Unterprogramm readlink oder readlinkat nicht erfolgreich ist, wird der Puffer nicht verändert, der Wert -1 wird zurückgegeben und die globale Variable errno wird gesetzt, um den Fehler anzuzeigen.
Fehlercodes
Die Unterprogramme readlink und readlinkat schlagen fehl, wenn eine oder beide der folgenden Bedingungen erfüllt sind:
| Element | Beschreibung |
|---|---|
| ENOENT | Die im Parameter Path angegebene Datei existiert nicht oder der Pfad zeigt auf eine leere Zeichenfolge. |
| EINVAL | Die mit dem Parameter Pfad angegebene Datei ist keine symbolische Verbindung. |
| ERANGE | Der Pfadname in der symbolischen Verbindung ist länger als der Wert für BufferSize . |
Das Unterprogramm readlinkat ist nicht erfolgreich, wenn eine oder mehrere der folgenden Bedingungen erfüllt sind:
| Element | Beschreibung |
|---|---|
| EBADF | Der Parameter Path gibt keinen absoluten Pfad an und der Parameter DirFileDescriptor ist weder AT_FDCWD noch ein gültiger Dateideskriptor. |
| ENOTDIR | Der Parameter Pfad gibt keinen absoluten Pfad an und der Parameter VerzeichnisDateideskriptor ist weder AT_FDCWD noch ein Dateideskriptor, der einem Verzeichnis zugeordnet ist. |
Die Unterprogramme readlink und readlinkat können auch aufgrund zusätzlicher Fehler fehlschlagen.
Wenn das Network File SystemNFS) auf dem System installiert ist, können die Unterprogramme readlink und readlinkat auch fehlschlagen, wenn Folgendes zutrifft:
| Element | Beschreibung |
|---|---|
| ETIMEDOUT | Das Zeitlimit für die Verbindung wurde überschritten. |