.\" -*- coding: UTF-8 -*- .\" Copyright (c) 1983, 1991 The Regents of the University of California. .\" And Copyright (C) 2011 Guillem Jover .\" And Copyright (C) 2006, 2014 Michael Kerrisk .\" All rights reserved. .\" .\" %%%LICENSE_START(BSD_4_CLAUSE_UCB) .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" %%%LICENSE_END .\" .\" @(#)readlink.2 6.8 (Berkeley) 3/10/91 .\" .\" Modified Sat Jul 24 00:10:21 1993 by Rik Faith (faith@cs.unc.edu) .\" Modified Tue Jul 9 23:55:17 1996 by aeb .\" Modified Fri Jan 24 00:26:00 1997 by aeb .\" 2011-09-20, Guillem Jover : .\" Added text on dynamically allocating buffer + example program .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH READLINK 2 "9. Juni 2020" Linux Linux\-Programmierhandbuch .SH BEZEICHNUNG readlink, readlinkat \- liest das Ziel eines symbolischen Links .SH ÜBERSICHT .nf \fB#include \fP .PP \fBssize_t readlink(const char *\fP\fIPfadname\fP\fB, char *\fP\fIPuffer\fP\fB, size_t \fP\fIPuffergröße\fP\fB);\fP \fB#include \fP/* Definition der AT_*\-Konstanten */ \fB#include \fP .PP \fBint readlinkat(int \fP\fIVerzdd\fP\fB, const char *\fP\fIPfadname\fP\fB,\fP \fB char *\fP\fIPuffer\fP\fB, size_t \fP\fIPuffergröße\fP\fB);\fP .PP .fi .RS -4 Mit Glibc erforderliche Feature\-Test\-Makros (siehe \fBfeature_test_macros\fP(7)): .RE .PP .ad l \fBreadlink\fP(): .RS 4 .\" || _XOPEN_SOURCE\ &&\ _XOPEN_SOURCE_EXTENDED _XOPEN_SOURCE\ >=\ 500 || _POSIX_C_SOURCE\ >=\ 200112L || /* Glibc\-Versionen <= 2.19: */ _BSD_SOURCE .RE .PP \fBreadlinkat\fP(): .PD 0 .ad l .RS 4 .TP 4 Seit Glibc 2.10: _POSIX_C_SOURCE\ >=\ 200809L .TP Vor Glibc 2.10: _ATFILE_SOURCE .RE .ad b .PD .SH BESCHREIBUNG \fBreadlink\fP() platziert den Inhalt des symbolischen Links \fIPfadname\fP in den \fIPuffer\fP, der die Größe \fIPuffergröße\fP hat. \fBreadlink\fP() hängt kein Nullbyte an \fIPuffer\fP an. Ist der Puffer zu klein, um den ganzen Inhalt aufzunehmen, verkürzt es (stillschweigend) den Inhalt (auf die Länge von \fIPuffergröße\fP Zeichen). .SS readlinkat() Der Systemaufruf \fBreadlinkat\fP() funktioniert, bis auf die hier beschriebenen Unterschiede, genauso wie \fBreadlink\fP(). .PP Falls der in \fIPfadname\fP übergebene Pfadname relativ ist, wird er als relativ zu dem im Dateideskriptor \fIVerzdd\fP referenzierten Verzeichnis interpretiert (statt relativ zum aktuellen Arbeitsverzeichnis des aufrufenden Prozesses, wie es bei \fBreadlink\fP() für einen relativen Pfadnamen erfolgt). .PP Falls \fIPfadname\fP relativ ist und \fIVerzdd\fP den besonderen Wert \fBAT_FDCWD\fP annimmt, wird \fIPfadname\fP als relativ zum aktuellen Arbeitsverzeichnis des aufrufenden Prozesses interpretiert (wie \fBreadlink\fP()). .PP Falls \fIPfadname\fP absolut ist, wird \fIVerzdd\fP ignoriert. .PP .\" commit 65cfc6722361570bfe255698d9cd4dccaf47570d Seit Linux 2.6.39 kann \fIPfadname\fP eine leere Zeichenkette sein. In diesem Fall arbeitet der Aufruf auf dem durch \fIVerzdd\fP referenzierten symbolischen Link (der durch die Verwendung der Schalter \fBO_PATH\fP und \fBO_NOFOLLOW\fP von \fBopen\fP(2) erlangt worden sein kann). .PP Lesen Sie \fBopenat\fP(2) für eine Beschreibung der Notwendigkeit von \fBreadlinkat\fP(). .SH RÜCKGABEWERT Bei Erfolg geben diese Aufrufe die Anzahl der Byte zurück, die in \fIPuffer\fP platziert wurden. (Falls der zurückgegebene Wert gleich \fIPuffergröße\fP ist, könnte eine Verkürzung aufgetreten sein.) Bei einem Fehler wird \-1 zurückgegeben und \fIerrno\fP so gesetzt, dass es den Fehler angibt. .SH FEHLER .TP \fBEACCES\fP Ein Bestandteil des Pfad\-Präfix durfte nicht durchsucht werden. (Siehe auch \fBpath_resolution\fP(7).) .TP \fBEFAULT\fP \fIPuffer\fP überschreitet den reservierten Adressbereich des Prozesses. .TP \fBEINVAL\fP .\" At the glibc level, bufsiz is unsigned, so this error can only occur .\" if bufsiz==0. However, the in the kernel syscall, bufsiz is signed, .\" and this error can also occur if bufsiz < 0. .\" See: http://thread.gmane.org/gmane.linux.man/380 .\" Subject: [patch 0/3] [RFC] kernel/glibc mismatch of "readlink" syscall? \fIPuffergröße\fP ist nicht positiv. .TP \fBEINVAL\fP Die benannte Datei (d.h. die endgültige Dateinamenkomponente von \fIPfadname\fP) ist kein symbolischer Link. .TP \fBEIO\fP Beim Lesen vom Dateisystem trat ein E/A\-Fehler (engl. I/O) auf. .TP \fBELOOP\fP Beim Übersetzen des Pfadnamens wurden zu viele symbolische Links vorgefunden. .TP \fBENAMETOOLONG\fP Ein Pfadname oder eine Komponente eines Pfadnamens war zu lang. .TP \fBENOENT\fP Die angegebene Datei existiert nicht. .TP \fBENOMEM\fP Es war nicht genügend Kernelspeicher verfügbar. .TP \fBENOTDIR\fP Eine Komponente des Pfad\-Präfixes ist kein Verzeichnis. .PP Die folgenden zusätzlichen Fehler können bei \fBreadlinkat\fP() auftreten: .TP \fBEBADF\fP \fIVerzdd\fP ist kein zulässiger Dateideskriptor. .TP \fBENOTDIR\fP \fIPfadname\fP ist relativ und \fIVerzdd\fP ist ein Dateideskriptor, der sich auf eine Datei bezieht, die kein Verzeichnis ist. .SH VERSIONEN \fBreadlinkat\fP() wurde zu Linux in Kernel 2.6.16 hinzugefügt; Bibliotheksunterstützung wurde zu Glibc in Version 2.4 hinzugefügt. .SH "KONFORM ZU" \fBreadlink\fP(): 4.4BSD (\fBreadlink\fP() erschien erstmalig in 4.2BSD), POSIX.1\-2001, POSIX.1\-2008. .PP \fBreadlinkat\fP(): POSIX.1\-2008. .SH ANMERKUNGEN In Glibc\-Versionen bis einschließlich Glibc 2.4 wurde der Typ des Rückgabewerts von \fBreadlink\fP() als \fIint\fP deklariert. Heutzutage ist der Typ des Rückgabewerts als \fIssize_t\fP deklariert, wie es (neuerdings) in POSIX.1\-2001 benötigt wird. .PP 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 \fIstat.st_size\fP ermittelt werden, der nach einem Aufruf der Funktion \fBlstat\fP(2) für den Link zurückgegeben wird. Allerdings sollte die Anzahl der Byte, die von \fBreadlink\fP() und \fBreadlinkat\fP() geschrieben wurden, überprüft werden. Damit kann sichergestellt werden, dass die Größe des symbolischen Links zwischen den Aufrufen nicht zugenommen hat. Die dynamische Zuweisung des Puffers für \fBreadlink\fP() und \fBreadlinkat\fP() behebt außerdem ein verbreitetes Portabilitätsproblem, wenn Sie \fBPATH_MAX\fP für die Puffergröße benutzen. Diese Konstante muss laut POSIX nicht zwingend definiert sein, wenn das System eine solche Beschränkung nicht hat. .SS "Anmerkungen zur Glibc" Unter älteren Kerneln, in denen \fBreadlinkat\fP() nicht verfügbar ist, weicht die Glibc\-Wrapper\-Funktion auf \fBreadlink\fP() aus. Wenn \fIPfadname\fP ein relativer Pfadname ist, dann konstruiert die Glibc einen Pfadnamen, der auf jenem symbolischen Link in \fI/proc/self/fd\fP basiert, der dem Argument \fIVerzdd\fP entspricht. .SH BEISPIELE Das folgende Programm reserviert den von \fBreadlink\fP() benötigten Puffer dynamisch mittels der Information, die von \fBlstat\fP(2) bereitgestellt wird. Dabei wird in Fällen, in denen \fBlstat\fP(2) die Größe Null zurückliefert, auf einen Puffer der Größe \fBPATH_MAX\fP zurückgefallen. .PP .EX #include #include #include #include #include #include int main(int argc, char *argv[]) { struct stat sb; char *buf; ssize_t nbytes, bufsiz; if (argc != 2) { fprintf(stderr, "Aufruf: %s \en", argv[0]); exit(EXIT_FAILURE); } if (lstat(argv[1], &sb) == \-1) { perror("lstat"); exit(EXIT_FAILURE); } /* Einen zur Linkgröße hinzufügen, so dass bestimmt werden kann, ob der von readlink() zurückgelieferte Puffer abgeschnitten wurde. */ bufsiz = sb.st_size + 1; /* Einige magische Symlinks unter (beispielsweise) /proc und /sys geben »st_size« als Null zurück. In diesem Fall wird PATH_MAX als eine »genügend gute« Schätzung angenommen. */ if (sb.st_size == 0) bufsiz = PATH_MAX; buf = malloc(bufsiz); if (buf == NULL) { perror("malloc"); exit(EXIT_FAILURE); } nbytes = readlink(argv[1], buf, bufsiz); if (nbytes == \-1) { perror("readlink"); exit(EXIT_FAILURE); } printf("\(aq%s\(aq zeigt auf \(aq%.*s\(aq\en", argv[1], (int) nbytes, buf); /* Falls der Rückgabewert der Puffergröße entsprach, dann war das Link\-Ziel größer als erwartet (vielleicht weil das Ziel zwischen dem Aufruf von lstat() und dem Aufruf von readlink() geändert wurde). Den Benutzer warnen, dass das zurückgelieferte Ziel abgeschnitten worden sein kann. */ if (nbytes == bufsiz) printf("(Zurückgelieferter Puffer könnte abgeschnitten worden sein)\en"); free(buf); exit(EXIT_SUCCESS); } .EE .SH "SIEHE AUCH" \fBreadlink\fP(1), \fBlstat\fP(2), \fBstat\fP(2), \fBsymlink\fP(2), \fBrealpath\fP(3), \fBpath_resolution\fP(7), \fBsymlink\fP(7) .SH KOLOPHON Diese Seite ist Teil der Veröffentlichung 5.10 des Projekts Linux\-\fIman\-pages\fP. Eine Beschreibung des Projekts, Informationen, wie Fehler gemeldet werden können, sowie die aktuelle Version dieser Seite finden sich unter \%https://www.kernel.org/doc/man\-pages/. .PP .SH ÜBERSETZUNG Die deutsche Übersetzung dieser Handbuchseite wurde von Markus Kaufmann , Chris Leick , Mario Blättermann , Dr. Tobias Quathamer und Helge Kreutzmann erstellt. .PP Diese Übersetzung ist Freie Dokumentation; lesen Sie die .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3 .UE oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen. .PP Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die .MT debian-l10n-german@lists.debian.org Mailingliste der Übersetzer .ME .