.\" -*- coding: UTF-8 -*- .\" Copyright (c) 1993 by Thomas Koenig (ig25@rz.uni-karlsruhe.de) .\" .\" %%%LICENSE_START(VERBATIM) .\" Permission is granted to make and distribute verbatim copies of this .\" manual provided the copyright notice and this permission notice are .\" preserved on all copies. .\" .\" Permission is granted to copy and distribute modified versions of this .\" manual under the conditions for verbatim copying, provided that the .\" entire resulting derived work is distributed under the terms of a .\" permission notice identical to this one. .\" .\" Since the Linux kernel and libraries are constantly changing, this .\" manual page may be incorrect or out-of-date. The author(s) assume no .\" responsibility for errors or omissions, or for damages resulting from .\" the use of the information contained herein. The author(s) may not .\" have taken the same level of care in the production of this manual, .\" which is licensed free of charge, as they might when working .\" professionally. .\" .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. .\" %%%LICENSE_END .\" .\" Modified Wed Jul 21 22:35:42 1993 by Rik Faith (faith@cs.unc.edu) .\" Modified 18 Mar 1996 by Martin Schulze (joey@infodrom.north.de): .\" Corrected description of getwd(). .\" Modified Sat Aug 21 12:32:12 MET 1999 by aeb - applied fix by aj .\" Modified Mon Dec 11 13:32:51 MET 2000 by aeb .\" Modified Thu Apr 22 03:49:15 CEST 2002 by Roger Luethi .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH GETCWD 3 "30. April 2018" GNU Linux\-Programmierhandbuch .SH BEZEICHNUNG getcwd, getwd, get_current_dir_name \- das aktuelle Verzeichnis abfragen .SH ÜBERSICHT .nf \fB#include \fP .PP \fBchar *getcwd(char *\fP\fIPuffer\fP\fB, size_t \fP\fIGröße\fP\fB);\fP .PP \fBchar *getwd(char *\fP\fIPuffer\fP\fB);\fP .PP \fBchar *get_current_dir_name(void);\fP .fi .PP .in -4n Mit Glibc erforderliche Makros (siehe \fBfeature_test_macros\fP(7)): .in .PP \fBget_current_dir_name\fP(): .RS _GNU_SOURCE .RE .PP \fBgetwd\fP(): .ad l .RS 4 .PD 0 .TP 4 Seit Glibc 2.12: .nf (_XOPEN_SOURCE\ >=\ 500) && ! (_POSIX_C_SOURCE\ >=\ 200809L) || /* Glibc seit 2.19: */ _DEFAULT_SOURCE || /* Glibc\-Versionen <= 2.19: */ _BSD_SOURCE .TP 4 .fi .\" || _XOPEN_SOURCE\ &&\ _XOPEN_SOURCE_EXTENDED Vor Glibc 2.12: _BSD_SOURCE || _XOPEN_SOURCE\ >=\ 500 .PD .RE .ad b .SH BESCHREIBUNG Diese Funktionen geben eine Zeichenkette mit abschließender Null zurück, die einen absoluten Pfadnamen enthält, der dem aktuellen Arbeitsverzeichnis des aufrufenden Prozesses entspricht. Der Pfadname wird als das Funktionsergebnis und, falls vorhanden, über das Argument \fIPuffer\fP zurückgegeben. .PP Die Funktion \fBgetcwd\fP() kopiert den absoluten Pfadnamen des aktuellen Arbeitsverzeichnisses in das Feld, auf das \fIPuffer\fP zeigt und das \fIGröße\fP Byte lang ist. .PP Falls die Länge des absoluten Pfadnamens des Arbeitsverzeichnisses, einschließlich abschließender Null \fIGröße\fP Byte überschreitet, wird NULL zurückgegeben und \fIerrno\fP auf \fBERANGE\fP gesetzt. Eine Anwendung sollte prüfen, ob dieser Fehler auftrat und falls nötig einen größeren Puffer reservieren. .PP Als eine Erweiterung des POSIX.1\-2001\-Standards reserviert \fBgetcwd\fP() der Linux\-Glibc den Puffer dynamisch durch Verwendung von \fBmalloc\fP(3), wenn \fIPuffer\fP NULL ist. In diesem Fall hat der reservierte Puffer die Länge \fIGröße\fP, sofern \fIGröße\fP nicht Null ist, wenn die für \fIPuffer\fP nötige Größe reserviert ist. Der Aufrufende sollte den zurückgegebenen Puffer mit \fBfree\fP(3) freigeben. .PP \fBget_current_dir_name\fP() wird mit \fBmalloc\fP(3) ein Feld reservieren, das groß genug ist, um den absoluten Pfadnamen des aktuellen Arbeitsverzeichnisses aufzunehmen. Wenn die Umgebungsvariable \fBPWD\fP gesetzt ist und ihr Wert stimmt, dann wird dieser Wert zurückgegeben. Der Aufrufende sollte den zurückgegebenen Puffer mit \fBfree\fP(3) freigeben. .PP \fBgetwd\fP() reserviert keinen Speicher mit \fBmalloc\fP(3). Das Argument \fIPuffer\fP sollte ein Zeiger auf ein Feld mit einer Mindestlänge von \fBPATH_MAX\fP Byte sein. Falls die Länge des absoluten Pfadnamens des aktuellen Arbeitsverzeichnisses einschließlich des abschließenden NULL\-Bytes \fBPATH_MAX\fP Byte überschreitet, wird NULL zurückgegeben und \fIerrno\fP auf \fBENAMETOOLONG\fP gesetzt. (Beachten Sie, dass \fBPATH_MAX\fP auf einigen Systemen zur Kompilierzeit möglicherweise keine Konstante ist; außerdem hängt ihr Wert vom Dateisystem ab – siehe \fBpathconf\fP(3).) Aus Gründen der Portierbarkeit und Sicherheit ist die Benutzung von \fBgetwd\fP() missbilligt. .SH RÜCKGABEWERT Bei Erfolg geben diese Funktionen einen Zeiger auf eine Zeichenkette zurück, die den Pfadnamen des aktuellen Arbeitsverzeichnisses enthält. Im Fall von \fBgetcwd\fP() und \fBgetwd\fP() ist dies der gleiche Wert wie \fIPuffer\fP. .PP Bei einem Fehlschlag geben diese Funktionen Null zurück und \fIerrno\fP wird so gesetzt, dass es den Fehler anzeigt. Der Inhalt des Feldes, auf den \fIPuffer\fP zeigt, ist bei einem Fehler nicht definiert. .SH FEHLER .TP \fBEACCES\fP Lese\- oder Suchberechtigung für einen Bestandteil des Dateinamens wurde verweigert. .TP \fBEFAULT\fP \fIPuffer\fP zeigt auf eine falsche Adresse. .TP \fBEINVAL\fP Das Argument \fIGröße\fP ist Null und \fIPuffer\fP ist kein Null\-Zeiger. .TP \fBEINVAL\fP \fBgetwd\fP(): \fIPuffer\fP ist NULL. .TP \fBENAMETOOLONG\fP \fBgetwd\fP(): Die Größe des absoluten Pfadnamens mit abschließender Null überschreitet \fBPATH_MAX\fP Byte. .TP \fBENOENT\fP Der Link auf das aktuelle Arbeitsverzeichnis wurde gelöst. .TP \fBENOMEM\fP Speicher aufgebraucht. .TP \fBERANGE\fP Das Argument \fIGröße\fP ist kleiner als die Länge des absoluten Pfadnamens des aktuellen Arbeitsverzeichnisses einschließlich abschließendem NULL\-Byte. Sie müssen ein größeres Feld reservieren und es erneut versuchen. .SH ATTRIBUTE Siehe \fBattributes\fP(7) für eine Erläuterung der in diesem Abschnitt verwandten Ausdrücke. .TS allbox; lbw22 lb lb l l l. Schnittstelle Attribut Wert T{ \fBgetcwd\fP(), \fBgetwd\fP() T} Multithread\-Fähigkeit MT\-Safe T{ \fBget_current_dir_name\fP() T} Multithread\-Fähigkeit MT\-Safe env .TE .SH "KONFORM ZU" \fBgetcwd\fP() ist konform zu POSIX.1\-2001. Beachten Sie jedoch, dass das Verhalten von \fBgetcwd\fP() unter POSIX.1\-2001 nicht spezifiziert ist, wenn \fIPuffer\fP NULL ist. .PP \fBgetwd\fP() ist in POSIX.1\-2001 vorhanden, aber als VERALTET markiert. POSIX.1\-2008 entfernt die Spezifikation von \fBgetwd\fP(). Benutzen Sie stattdessen \fBgetcwd\fP(). POSIX.1\-2001 definiert keine Fehler für \fBgetwd\fP(). .PP \fBget_current_dir_name\fP() ist eine GNU\-Erweiterung. .SH ANMERKUNGEN Unter Linux nutzen diese Funktionen den Systemaufruf \fBgetcwd\fP() (verfügbar seit 2.1.92). Auf älteren Systemen würden sie \fI/proc/self/cwd\fP abfragen. Falls sowohl der Systemaufruf, als auch das »proc«\-Dateisystem fehlen, wird eine allgemeine Implementierung aufgerufen. Nur in diesem Fall können diese Systemaufrufe unter Linux mit \fBEACCES\fP fehlschlagen. .PP .\" Diese Funktionen werden oft benutzt, um den Ort des aktuellen Arbeitsverzeichnisses zum Zweck der späteren Rückkehr zu speichern. Das aktuelle Verzeichnis ».« zu öffnen und \fBfchdir\fP(2) zur Rückkehr aufzurufen ist normalerweise schneller und eine zuverlässigere Alternative, wenn ausreichend viele Dateideskriptoren zur Verfügung stehen, besonders auf anderen Plattformen als Linux. .SS "Unterschiede C\-Bibliothek/Kernel" .\" commit 3272c544da48f8915a0e34189182aed029bd0f2b Unter Linux stellt der Kernel einen Systemaufruf \fBgetcwd\fP() bereit, den die in dieser Seite beschriebenen Funktionen falls möglich benutzen. Der Systemaufruf akzeptiert die gleichen Argumente wie die Bibliotheksfunktion des gleichen Namens, aber sie ist darauf begrenzt, maximal \fBPATH_MAX\fP Byte zurückzuliefern. (Vor Linux 3.12 war die Begrenzung der Größe des zurückgelieferten Pfadnamens die Systemseitengröße. Auf vielen Architekturen sind sowohl \fBPATH_MAX\fP als auch die Systemseitengröße beide 4096 Byte, aber einige Architekturen haben eine größere Seitengröße.) Falls die Länge des Pfadnamens des aktuellen Arbeitsverzeichnisses dies Begrenzung überschreitet, dann schlägt der Systemaufruf mit dem Fehler \fBENAMETOOLONG\fP fehl. In diesem Fall fällt die Bibliotheksfunktion auf eine (langsamere) alternative Implementierung zurück, die den kompletten Pfadnamen zurückliefert. .PP .\" commit 8df9d1a4142311c084ffeeacb67cd34d190eff74 Folgend einer Änderung in Linux 2.6.36 wird dem durch den Systemaufruf \fBgetcwd\fP() zurückgelieferten Pfadnamen die Zeichenkette »(unreachable)« vorangestellt, falls das aktuelle Verzeichnis nicht unterhalb des Wurzelverzeichnisses des aktuellen Prozesses ist (z.B. da der Prozess auf eine neue Dateisystemwurzel mittels \fBchroot\fP(2) gesetzt wurde, ohne sein aktuelles Verzeichnis in die neue Wurzel zu wechseln). Dieses Verhalten kann auch durch einen nichtprivilegierten Benutzer hervorgerufen werden, der das aktuelle Verzeichnis in einen anderen Einhängenamensraum gewechselt hat. Beim Umgang mit Pfadnamen von nichtvertrauenswürdigen Quellen sollten Aufrufende von in dieser Seite beschriebenen Funktionen in Betracht ziehen, zu überprüfen, ob der zurückgelieferte Pfadname mit »/« oder mit »(« anfängt, um zu vermeiden, dass ein nicht erreichbarer Pfad als relativer Pfadname misinterpretiert wird. .SH FEHLER Seit der Änderung in Linux 2.6.36, die »(unreachable)« in den oben beschriebenen Gegebenheiten hinzufügte, ist Glibcs Implementierung von \fBgetcwd\fP() nicht mehr mit POSIX konform und liefert einen relativen Pfadnamen zurück, wenn der API\-Vertrag einen absoluten Pfadnamen verlangt. Ab Glibc 2.27 ist dies korrigiert: ein Aufruf von \fBgetcwd\fP() von solch einem Pfadnamen liefert jetzt einen Fehlschlag mit \fBENOENT\fP. .SH "SIEHE AUCH" \fBpwd\fP(1), \fBchdir\fP(2), \fBfchdir\fP(2), \fBopen\fP(2), \fBunlink\fP(2), \fBfree\fP(3), \fBmalloc\fP(3) .SH KOLOPHON Diese Seite ist Teil der Veröffentlichung 5.04 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/. .SH ÜBERSETZUNG Die deutsche Übersetzung dieser Handbuchseite wurde von Martin Schulze , Chris Leick , Mario Blättermann und Helge Kreutzmann erstellt. 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. 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 .