table of contents
other sections
READLINK(2) | Linux-Programmierhandbuch | READLINK(2) |
BEZEICHNUNG¶
readlink - liest das Ziel eines symbolischen LinksÜBERSICHT¶
#include <unistd.h>Mit Glibc erforderliche Makros (siehe feature_test_macros(7)):
_BSD_SOURCE ||
_XOPEN_SOURCE >= 500 ||
_XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED ||
_POSIX_C_SOURCE >= 200112L
BESCHREIBUNG¶
readlink() platziert den Inhalt des symbolischen Links pfad in den Puffer puffer, der die Größe puffergroesse hat. readlink() hängt kein Null-Byte an puffer. Ist der Puffer zu klein, um den ganzen Inhalt aufzunehmen, verkürzt es den Inhalt (auf die Länge von puffergroesse Zeichen).RÜCKGABEWERT¶
Bei Erfolg gibt readlink() die Anzahl der Byte zurück, die in puffer platziert wurden. Bei einem Fehler wird -1 zurückgegeben und errno so gesetzt, dass es den Fehler angibt.FEHLER¶
- EACCES
- Für einen Bestandteil des Pfad-Präfix fehlt die Sucherlaubnis. (Siehe auch path_resolution(7).)
- EFAULT
- puffer überschreitet den reservierten Adressbereich dieses Prozesses.
- EINVAL
- puffergroesse ist nicht positiv.
- EINVAL
- Die genannte Datei ist kein symbolischer Link.
- EIO
- Beim Lesen vom Dateisystem trat ein E/A-Fehler auf.
- ELOOP
- Beim Übersetzen des Pfadnamens wurden zu viele symbolische Links vorgefunden.
- ENAMETOOLONG
- Ein Pfadname oder ein Bestandteil eines Pfadnamens war zu lang.
- ENOENT
- Der genannte Dateiname existiert nicht.
- ENOMEM
- Es war nicht genügend Kernel-Speicher verfügbar.
- ENOTDIR
- Eine Komponente des Pfad-Präfixes ist kein Verzeichnis.
KONFORM ZU¶
4.4BSD ( readlink() erschien erstmalig in 4.2BSD), POSIX.1-2001.ANMERKUNGEN¶
In Glibc-Versionen bis einschließlich Glibc 2.4 wurde der Typ des Rückgabewerts von readlink() als int deklariert. Heutzutage ist der Typ des Rückgabewerts als ssize_t deklariert, wie es (neuerdings) in POSIX.1-2001 benötigt wird.BEISPIEL¶
Das folgende Programm reserviert den von readlink() benötigten Puffer dynamisch mittels der Information, die von lstat() bereitgestellt wird. Dabei wird sichergestellt, dass zwischen den Aufrufen keine Race-Condition entsteht.#include <sys/types.h> #include <sys/stat.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> int main(int argc, char *argv[]) { struct stat sb; char *linkname; ssize_t r; if (argc != 2) { fprintf(stderr, "Usage: %s <pathname>\n", argv[0]); exit(EXIT_FAILURE); } if (lstat(argv[1], &sb) == -1) { perror("lstat"); exit(EXIT_FAILURE); } linkname = malloc(sb.st_size + 1); if (linkname == NULL) { fprintf(stderr, "insufficient memory\n"); exit(EXIT_FAILURE); } r = readlink(argv[1], linkname, sb.st_size + 1); if (r < 0) { perror("lstat"); exit(EXIT_FAILURE); } if (r > sb.st_size) { fprintf(stderr, "symlink increased in size " "between lstat() and readlink()\n"); exit(EXIT_FAILURE); } linkname[sb.st_size] = '\0'; printf("'%s' points to '%s'\n", argv[1], linkname); exit(EXIT_SUCCESS); }
SIEHE AUCH¶
readlink(1), lstat(2), readlinkat(2), stat(2), symlink(2), path_resolution(7), symlink(7)KOLOPHON¶
Diese Seite ist Teil der Veröffentlichung 3.42 des Projekts Linux- man-pages. Eine Beschreibung des Projekts und Informationen, wie Fehler gemeldet werden können, finden sich unter http://www.kernel.org/doc/man-pages/.ÜBERSETZUNG¶
Die deutsche Übersetzung dieser Handbuchseite wurde von Markus Kaufmann <markus.kaufmann@gmx.de>, Chris Leick <c.leick@vollbio.de> und Tobias Quathamer <toddy@debian.org> erstellt.20. September 2011 | Linux |