Definition | #include <unistd.h> int readlink(const char *path, char *buf, size_t bufsize); int readlinkat(int fd, const char *path, char *buf, size_t bufsize); |
Beschreibung | readlink() schreibt den Inhalt des symbolischen Verweises, auf den path weist, in den Puffer buf, welcher die Länge bufsize hat. Der Inhalt des Verweises ist bei der Rückgabe nicht mit einem Nullbyte abgeschlossen.
Die Funktion readlinkat() ist äquivalent zu der Funktion readlink() , außer wenn der Parameter path einen relativen Pfad spezifiziert. In diesem Fall wird der symbolische Verweis, dessen Inhalt gelesen werden soll, nicht im aktuellen Dateiverzeichnis, sondern in dem mit dem Dateideskriptor fd verbundenen Dateiverzeichnis gesucht. Wurde der Dateideskriptor ohne O_SEARCH geöffnet, prüft die Funktionen, ob eine Suche im verbundenen Dateiverzeichnis mit den dem Dateiverzeichnis zugrunde liegenden Berechtigungen erlaubt ist. Wurde der Dateideskriptor mit O_SEARCH geöffnet, unterbleibt die Prüfung. Wenn der Funktion readlinkat() für den Parameter fd der Wert AT_FDCWD übergeben wurde, wird das aktuelle Dateiverzeichnis benutzt. |
Returnwert | Anzahl von Zeichen, die in den Puffer geschrieben wurden |
|
| bei erfolgreicher Beendigung. |
| -1 | bei Fehler. errno wird gesetzt, um den Fehler anzuzeigen. Der Inhalt des Puffers bleibt unverändert. |
Fehler | readlink() und readlinkat() schlagen fehl, wenn gilt:
|
| EACCES
| Für eine der Pfadpräfix-Komponenten in path besteht kein Suchrecht. |
| EFAULT
| path oder buf befinden sich außerhalb des allokierten Adressbereichs des Prozesses. |
| EINVAL
| path ist kein symbolischer Verweis. |
| Erweiterung |
| EINVAL
| Es wurde versucht, auf eine BS2000-Datei zuzugreifen. (Ende) |
| EIO
| Ein Ein-/Ausgabefehler ist beim Lesen oder Schreiben des Dateisystems aufgetreten. |
| ELOOP
| Bei der Übersetzung von path treten zu viele symbolische Verweise auf. |
| ENAMETOOLONG
|
|
| Die Länge des path-Arguments überschreitet {PATH_MAX} oder die Länge einer path-Komponente überschreitet {NAME_MAX} . |
| ENOENT
| Die genannte Datei existiert nicht. |
| ENOSYS
| Das Dateisystem unterstützt keine symbolischen Verweise. |
| ENOTDIR
| Eine der Pfadpräfix-Komponenten in path ist kein Verzeichnis. |
| Zusätzlich schlägt readlinkat() fehl, wenn gilt: |
| EACCES
| Der Dateideskriptor fd wurde nicht mit O_SEARCH geöffnet und die dem Dateiverzeichnis zugrunde liegenden Berechtigungen erlauben nicht das Durchsuchen des Dateiverzeichnisses. |
| EBADF
| Der Parameter path spezifiziert keinen absoluten Pfadnamen und der Parameter fd hat weder den Wert AT_FDCWD , noch enthält er einen gültigen zum Lesen oder Suchen geöffneten Dateideskriptor. |
| ENOTDIR
| Der Parameter path spezifiziert keinen absoluten Pfadnamen und der Dateideskriptor fd ist nicht mit einem Dateiverzeichnis verbunden. |
Hinweis | readlink() und readlinkat() greifen nur auf POSIX-Dateien zu.
|
Siehe auch | stat() , symlink() , fcntl.h , unistd.h .
|