Provided by: manpages-de-dev_1.4-1_all bug

BEZEICHNUNG

       readlink - liest das Ziel eines symbolischen Links

ÜBERSICHT

       #include <unistd.h>

       ssize_t readlink(const char *pfad, char *puffer, size_t puffergroesse);

   Mit Glibc erforderliche Makros (siehe feature_test_macros(7)):

       readlink():
           _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 (engl. I/O) auf.

       ELOOP  Beim Übersetzen des Pfadnamens wurden zu viele symbolische Links vorgefunden.

       ENAMETOOLONG
              Ein Pfadname oder ein Bestandteil eines Pfadnamens war zu lang.

       ENOENT Die angegebene Datei 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.

       Wenn  Sie  einen  Puffer mit einer festen Größe verwenden, ist eventuell nicht genug Platz
       für die Inhalte des symbolischen Links vorhanden. Die erforderliche Größe für  den  Puffer
       kann  aus  dem  Wert  stat.st_size  ermittelt  werden,  der nach einem Aufruf der Funktion
       lstat(2) für den Link zurückgegeben wird. Allerdings sollte die Anzahl der Byte,  die  von
       readlink()  geschrieben  wurden,  überprüft werden. Damit kann sichergestellt werden, dass
       die Größe  des  symbolischen  Links  zwischen  den  Aufrufen  nicht  zugenommen  hat.  Die
       dynamische  Allokation  des  Puffers  für  readlink()  behebt  außerdem  ein  verbreitetes
       Portabilitätsproblem, wenn Sie PATH_MAX für die Puffergröße benutzen. Diese Konstante muss
       laut  POSIX  nicht zwingend definiert sein, wenn das System eine solche Beschränkung nicht
       hat.

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 == -1) {
               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[r] = '\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

       This page is part of release 3.54 of the Linux man-pages project.  A  description  of  the
       project,     and    information    about    reporting    bugs,    can    be    found    at
       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>,    Tobias   Quathamer
       <toddy@debian.org> und Mario Blättermann <mario.blaettermann@gmail.com> erstellt.

       Diese Übersetzung ist Freie Dokumentation;  lesen  Sie  die  GNU  General  Public  License
       Version   3  oder  neuer  bezüglich  der  Copyright-Bedingungen.  Es  wird  KEINE  HAFTUNG
       übernommen.

       Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-
       Mail an <debian-l10n-german@lists.debian.org>.