.\" -*- coding: UTF-8 -*- .\" Copyright (c) 1992 Drew Eckhardt (drew@cs.colorado.edu), March 28, 1992 .\" Parts Copyright (c) 1995 Nicolai Langfeldt (janl@ifi.uio.no), 1/1/95 .\" and Copyright (c) 2006, 2007, 2014 Michael Kerrisk .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\" Modified by Michael Haardt .\" Modified 1993-07-24 by Rik Faith .\" Modified 1995-05-18 by Todd Larason .\" Modified 1997-01-31 by Eric S. Raymond .\" Modified 1995-01-09 by Richard Kettlewell .\" Modified 1998-05-13 by Michael Haardt .\" Modified 1999-07-06 by aeb & Albert Cahalan .\" Modified 2000-01-07 by aeb .\" Modified 2004-06-23 by Michael Kerrisk .\" 2007-06-08 mtk: Added example program .\" 2007-07-05 mtk: Added details on underlying system call interfaces .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH stat 2 "3. Mai 2023" "Linux man\-pages 6.05.01" .SH BEZEICHNUNG stat, fstat, lstat, fstatat \- Dateistatus ermitteln .SH BIBLIOTHEK Standard\-C\-Bibliothek (\fIlibc\fP, \fI\-lc\fP) .SH ÜBERSICHT .nf \fB#include \fP .PP \fBint stat(const char *restrict \fP\fIPfadname\fP\fB,\fP \fB struct stat *restrict \fP\fIStatuspuffer\fP\fB);\fP \fBint fstat(int \fP\fIdd\fP\fB, struct stat *\fP\fIStatuspuffer\fP\fB);\fP \fBint lstat(const char *restrict \fP\fIPfadname\fP\fB,\fP \fB struct stat *restrict \fP\fIStatuspuffer\fP\fB);\fP .PP \fB#include \fP/* Definition der \fBAT_*\fP\-Konstanten */ \fB#include \fP .PP \fBint fstatat(int \fP\fIVerzdd\fP\fB, const char *restrict \fP\fIPfadname\fP\fB,\fP \fB struct stat *restrict \fP\fIStatuspuffer\fP\fB, int \fP\fISchalter\fP\fB);\fP .fi .PP .RS -4 Mit Glibc erforderliche Feature\-Test\-Makros (siehe \fBfeature_test_macros\fP(7)): .RE .PP \fBlstat\fP(): .nf .\" _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED /* Seit Glibc 2.20 */ _DEFAULT_SOURCE || _XOPEN_SOURCE >= 500 || /* Seit Glibc 2.10: */ _POSIX_C_SOURCE >= 200112L || /* Glibc 2.19 und älter */ _BSD_SOURCE .fi .PP \fBfstatat\fP(): .nf Seit Glibc 2.10: _POSIX_C_SOURCE >= 200809L Vor Glibc 2.10: _ATFILE_SOURCE .fi .SH BESCHREIBUNG Diese Funktionen geben Informationen über eine Datei im Puffer zurück, auf den \fIStatuspuffer\fP zeigt. Dazu werden keinerlei Rechte an der angegebenen Datei benötigt, aber – im Falle von \fBstat\fP(), \fBfstatat\fP() und \fBlstat\fP() – müssen alle Verzeichnisse im \fIPfadnamen\fP, der zu der Datei führt, durchsucht werden dürfen. .PP \fBstat\fP() und \fBfstatat\fP() liefern die Informationen zu der in \fIPfadname\fP angegebenen Datei und übergibt diese an \fIfstatat\fP(), wie nachfolgend beschrieben. .PP \fBlstat\fP() ist ähnlich \fBstat\fP(), nur dass falls \fIPfadname\fP ein symbolischer Link ist, Informationen zum Link zurückgegeben werden und nicht zur Datei, auf die der Link zeigt. .PP .\" \fBfstat\fP ist ähnlich \fBstat\fP, außer dass die Datei, zu der Informationen ermittelt werden sollen, durch den Dateideskriptor \fIdd\fP angegeben wird. .SS "Die Struktur stat" Alle diese Systemaufrufe geben eine Struktur \fIstat\fP zurück, siehe \fBstat\fP(3type)). .PP .\" Background: inode attributes are modified with i_mutex held, but .\" read by stat() without taking the mutex. \fIHinweis\fP: Zur Leistungsverbesserung und aus Einfachheitsgründen können verschiedene Felder in der Struktur \fIstat\fP Zustandsinformationen von verschiedenen Zeitpunkten während der Ausführung des Systemaufrufs enthalten. Wird beispielsweise \fIst_mode\fP oder \fIst_uid\fP von einem anderen Prozess während der Ausführung des Systemaufrufs durch Aufruf von \fBchmod\fP(2) oder \fBchown\fP(2) geändert, dann könnte \fBstat\fP() den alten \fIst_mode\fP zusammen mit dem neuen \fIst_uid\fP oder den alten \fIst_uid\fP zusammen mit dem neuen \fIst_mode\fP zurückliefern. .SS fstatat() Der Systemaufruf \fBfstatat\fP() ist eine allgemeinere Schnittstelle zum Zugriff auf Dateiinformationen, die immer noch das gleiche Verhalten wie einer aus \fBstat\fP(), \fBlstat\fP() und \fBfstat\fP() bereitstellen kann. .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 \fBstat\fP() und \fBlstat\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 \fBstat\fP() und \fBlstat\fP()). .PP Falls \fIPfadname\fP absolut ist, wird \fIVerzdd\fP ignoriert. .PP \fISchalter\fP kann entweder 0 sein oder durch bitweises ODER eines oder mehrere der folgenden Schalter gesetzt haben: .TP \fBAT_EMPTY_PATH\fP (seit Linux 2.6.39) .\" commit 65cfc6722361570bfe255698d9cd4dccaf47570d .\" Before glibc 2.16, defining _ATFILE_SOURCE sufficed Falls \fIPfadname\fP eine leere Zeichenkette ist, wird mit der Datei gearbeitet, auf die \fIVerzdd\fP verweist (dies kann mit dem \fBO_PATH\fP\-Schalter von \fBopen\fP(2) ermittelt werden). In diesem Fall kann sich \fIVerzdd\fP auf jeden Dateityp beziehen, nicht nur einem Verzeichnis und das Verhalten von \fBfstatat\fP() ist ähnlich zu dem von \fBfstat\fP(). Falls \fIVerzdd\fP \fBAT_FDCWD\fP ist, erfolgt der Aufruf im aktuellen Arbeitsverzeichnis. Dieser Schalter ist Linux\-spezifisch; definieren Sie \fB_GNU_SOURCE\fP, um dessen Definition zu ermitteln. .TP \fBAT_NO_AUTOMOUNT\fP (seit Linux 2.6.38) Die Terminal\- (»Basisnamen«\-)Komponente von \fIPfadname\fP nicht automatisch einhängen. Seit Linux 3.1 wird dieser Schalter ignoriert. Seit Linux 4.11 wird dieser Schalter impliziert. .TP \fBAT_SYMLINK_NOFOLLOW\fP Falls \fIPfadname\fP ein symbolischer Link ist, wird er nicht dereferenziert: Stattdessen werden Informationen zum Link selbst zurückgegeben, wie \fBlstat\fP(). In der Voreinstellung dereferenziert \fBfstatat\fP() symbolische Links, wie auch \fBstat\fP(). .PP Lesen Sie \fBopenat\fP(2) für eine Beschreibung der Notwendigkeit von \fBfstatat\fP(). .SH RÜCKGABEWERT Bei Erfolg wird Null zurückgegeben. Bei einem Fehler wird \-1 zurückgegeben und \fIerrno\fP gesetzt, um den Fehler anzuzeigen. .SH FEHLER .TP \fBEACCES\fP Der Suchzugriff auf eines der Verzeichnisse im Pfadpräfix von \fIPfadname\fP wurde verweigert (siehe auch \fBpath_resolution\fP(7)). .TP \fBEBADF\fP \fIdd\fP ist kein zulässiger offener Dateideskriptor. .TP \fBEBADF\fP (\fBfstatat\fP()) Der \fIPfadname\fP ist relativ, aber \fIVerzdd\fP ist weder \fBAT_FDCWD\fP noch ein gültiger Dateideskriptor. .TP \fBEFAULT\fP Ungültige Adresse. .TP \fBEINVAL\fP (\fBfstatat\fP()) Unzulässiger Schalter in \fISchalter\fP angegeben. .TP \fBELOOP\fP Beim Pfaddurchlauf wurden zu viele symbolische Links gefunden. .TP \fBENAMETOOLONG\fP \fIPfadname\fP ist zu lang. .TP \fBENOENT\fP Eine Komponente von \fIPfadname\fP existiert nicht oder ist ein toter symbolischer Link. .TP \fBENOENT\fP \fIPfadname\fP ist die leere Zeichenkette und \fBAT_EMPTY_PATH\fP wurde in \fISchalter\fP nicht angegeben. .TP \fBENOMEM\fP Kein Speicher mehr (das bedeutet Speicher im Kernel). .TP \fBENOTDIR\fP Eine Komponente des Pfadpräfixes von \fIPfadname\fP ist kein Verzeichnis. .TP \fBENOTDIR\fP (\fBfstatat\fP()) \fIPfadname\fP ist relativ und \fIVerzdd\fP ist ein Dateideskriptor, der sich auf eine Datei bezieht, die kein Verzeichnis ist. .TP \fBEOVERFLOW\fP \fIPfadname\fP oder \fIdd\fP bezieht sich auf eine Datei, deren Name, Inode\-Anzahl oder Anzahl der Blöcke nicht durch die Typen \fIoff_t\fP, \fIino_t\fP oder \fIblkcnt_t\fP repräsentiert werden kann. Dieser Fehler kann beispielsweise auftreten, wenn eine auf einer 32\-bit\-Plattform kompilierte Anwendung ohne \fI\-D_FILE_OFFSET_BITS=64\fP \fBstat\fP() für eine Datei aufruft, deren Größe \fI(1<<31)\-1\fP Byte übersteigt. .SH STANDARDS POSIX.1\-2008. .SH GESCHICHTE .TP \fBstat\fP() .TQ \fBfstat\fP() .TQ \fBlstat\fP() .\" SVr4 documents additional .\" .BR fstat () .\" error conditions EINTR, ENOLINK, and EOVERFLOW. SVr4 .\" documents additional .\" .BR stat () .\" and .\" .BR lstat () .\" error conditions EINTR, EMULTIHOP, ENOLINK, and EOVERFLOW. SVr4, 4.3BSD, POSIX.1\-2001. .TP \fBfstatat\fP() POSIX.1\-2008. Linux 2.6.16, Glibc 2.4. .PP Entsprechend POSIX.1\-2001 benötigt \fBlstat\fP() bei Anwendung auf einen symbolischen Link lediglich im Feld \fIst_size\fP und im Dateityp des \fIst_mode\fP\-Feldes der \fIstat\fP\-Struktur gültige Rückgabeinformationen. POSIX.1\-2008 engt diese Spezifikation ein, indem \fBlstat\fP() in allen Feldern außer den Modus\-Bits in \fIst_mode\fP gültige Informationen zurückgeben muss. .PP Die Verwendung der Felder \fIst_blocks\fP und \fIst_blksize\fP kann die Portabilität einschränken. Diese wurden in BSD eingeführt. Die Interpretation unterscheidet sich auf verschiedenen Systemen, und möglicherweise auf einem einzelnen System, wenn NFS\-Einhängungen bestehen. .SS "Unterschiede C\-Bibliothek/Kernel" .\" See include/asm-i386/stat.h in the Linux 2.4 source code for the .\" various versions of the structure definitions Mit der Zeit führte der Größenzuwachs der \fIstat\fP\-Struktur auf 32\-Bit\-Plattformen wie i386 zu drei Folgeversionen von \fBstat\fP(): \fIsys_stat\fP() (slot \fI__NR_oldstat\fP), \fIsys_newstat\fP() (slot \fI__NR_stat\fP) und \fIsys_stat64()\fP (slot \fI__NR_stat64\fP). Die ersten zwei Versionen waren bereits in Linux 1.0. (allerdings mit anderen Namen) verfügbar; die letzte wurde in Linux 2.4 hinzugefügt. Ähnliches gilt für \fBfstat\fP() und \fBlstat\fP(). .PP Die kernelinterne Version der Struktur \fIstat\fP handhabte drei verschieden Versionen, und zwar: .TP \fI__old_kernel_stat\fP Die ursprüngliche Struktur, mit eher engen Felder und keiner Auffüllung. .TP \fIstat\fP Größeres Feld \fIst_ino\fP mit ergänzter Auffüllung an verschiedenen Teilen der Struktur, um zukünftige Erweiterungen zu erlauben. .TP \fIstat64\fP Noch größeres Feld \fIst_ino\fP, größere Felder \fIst_uid\fP und \fIst_gid\fP, um der Linux\-2.4\-Erweiterung der UIDs und GIDs auf 32 bit Platz zu schaffen, und verschiedene andere vergrößerte Felder und weitere Auffüllungen in der Struktur. (Verschiedene Auffüllbytes wurden schließlich in Linux 2.6 mit dem Aufkommen von 32\-bit\-Gerätekennungen und Nanosekundenkomponenten der Zeitstempelfelder benutzt.) .PP .\" .\" A note from Andries Brouwer, July 2007 .\" .\" > Is the story not rather more complicated for some calls like .\" > stat(2)? .\" .\" Yes and no, mostly no. See /usr/include/sys/stat.h . .\" .\" The idea is here not so much that syscalls change, but that .\" the definitions of struct stat and of the types dev_t and mode_t change. .\" This means that libc (even if it does not call the kernel .\" but only calls some internal function) must know what the .\" format of dev_t or of struct stat is. .\" The communication between the application and libc goes via .\" the include file that defines a _STAT_VER and .\" _MKNOD_VER describing the layout of the data that user space .\" uses. Each (almost each) occurrence of stat() is replaced by .\" an occurrence of xstat() where the first parameter of xstat() .\" is this version number _STAT_VER. .\" .\" Now, also the definitions used by the kernel change. .\" But glibc copes with this in the standard way, and the .\" struct stat as returned by the kernel is repacked into .\" the struct stat as expected by the application. .\" Thus, _STAT_VER and this setup cater for the application-libc .\" interface, rather than the libc-kernel interface. .\" .\" (Note that the details depend on gcc being used as c compiler.) Die Wrapperfunktion der Glibc \fBstat\fP() versteckt diese Details vor Anwendungen. Sie ruft die neuste Version des vom Kernel bereitgestellten Systemaufrufs auf und packt die zurückgelieferten Informationen neu, falls dies für alte Programme benötigt wird. .PP Auf modernen 64\-Bit\-Systemen ist das Leben einfacher: Es gibt einen einzigen Systemaufruf \fBstat\fP() und der Kernel arbeitet mit einer Struktur \fIstat\fP, die Felder einer ausreichenden Größe enthält. .PP .\" strace(1) shows the name "newfstatat" on x86-64 Der der Glibc\-Wrapper\-Funktion \fBfstatat\fP() zugrunde liegende Systemaufruf ist tatsächlich \fBfstatat64\fP() oder auf einigen Architekturen \fBnewfstatat\fP(). .SH BEISPIELE Das folgende Programm ruft \fBlstat\fP() auf zeigt ausgewählte Felder der zurückgelieferten Struktur \fIstat\fP an. .PP .\" SRC BEGIN (stat.c) .EX #include #include #include #include #include #include \& int main(int argc, char *argv[]) { struct stat sb; \& if (argc != 2) { fprintf(stderr, "Usage: %s \en", argv[0]); exit(EXIT_FAILURE); } \& if (lstat(argv[1], &sb) == \-1) { perror("lstat"); exit(EXIT_FAILURE); } \& printf("ID of containing device: [%x,%x]\en", major(sb.st_dev), minor(sb.st_dev)); \& printf("File type: "); \& switch (sb.st_mode & S_IFMT) { case S_IFBLK: printf("block device\en"); break; case S_IFCHR: printf("character device\en"); break; case S_IFDIR: printf("directory\en"); break; case S_IFIFO: printf("FIFO/pipe\en"); break; case S_IFLNK: printf("symlink\en"); break; case S_IFREG: printf("regular file\en"); break; case S_IFSOCK: printf("socket\en"); break; default: printf("unknown?\en"); break; } \& printf("I\-node number: %ju\en", (uintmax_t) sb.st_ino); \& printf("Mode: %jo (octal)\en", (uintmax_t) sb.st_mode); \& printf("Link count: %ju\en", (uintmax_t) sb.st_nlink); printf("Ownership: UID=%ju GID=%ju\en", (uintmax_t) sb.st_uid, (uintmax_t) sb.st_gid); \& printf("Preferred I/O block size: %jd bytes\en", (intmax_t) sb.st_blksize); printf("File size: %jd bytes\en", (intmax_t) sb.st_size); printf("Blocks allocated: %jd\en", (intmax_t) sb.st_blocks); \& printf("Last status change: %s", ctime(&sb.st_ctime)); printf("Last file access: %s", ctime(&sb.st_atime)); printf("Last file modification: %s", ctime(&sb.st_mtime)); \& exit(EXIT_SUCCESS); } .EE .\" SRC END .SH "SIEHE AUCH" \fBls\fP(1), \fBstat\fP(1), \fBaccess\fP(2), \fBchmod\fP(2), \fBchown\fP(2), \fBreadlink\fP(2), \fBstatx\fP(2), \fButime\fP(2), \fBstat\fP(3type), \fBcapabilities\fP(7), \fBinode\fP(7), \fBsymlink\fP(7) .PP .SH ÜBERSETZUNG Die deutsche Übersetzung dieser Handbuchseite wurde von Jonas Rovan , Martin Schulze , Michael Piefel , Mario Blättermann 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 .