.\" -*- coding: UTF-8 -*- '\" t .\" 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 .\" .\" %%%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 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 "8. Oktober 2016" Linux Linux\-Programmierhandbuch .SH BEZEICHNUNG stat, fstat, lstat, fstatat \- Dateistatus ermitteln .SH ÜBERSICHT .nf \fB#include \fP .br \fB#include \fP .br \fB#include \fP .sp \fBint stat(const char *\fP\fIPfadname\fP\fB, struct stat *\fP\fIPuffer\fP\fB);\fP .br \fBint fstat(int \fP\fIfd\fP\fB, struct stat *\fP\fIPuffer\fP\fB);\fP .br \fBint lstat(const char *\fP\fIPfadname\fP\fB, struct stat *\fP\fIPuffer\fP\fB);\fP .sp \fB#include \fP/* Definition der AT_*\-Konstanten */ \fB#include \fP .sp \fBint fstatat(int \fP\fIdirfd\fP\fB, const char *\fP\fIPfadname\fP\fB, struct stat *\fP\fIPuffer\fP\fB,\fP \fB int \fP\fISchalter\fP\fB);\fP .fi .sp .in -4n Mit Glibc erforderliche Makros (siehe \fBfeature_test_macros\fP(7)): .in .ad l .PD 0 .sp \fBlstat\fP(): .RS 4 /* Glibc 2.19 und älter */ _BSD_SOURCE .br || /* Seit Glibc 2.20 */ _DEFAULT_SOURCE .br .\" _XOPEN_SOURCE\ &&\ _XOPEN_SOURCE_EXTENDED || _XOPEN_SOURCE\ >=\ 500 .br || /* Seit Glibc 2.10: */ _POSIX_C_SOURCE\ >=\ 200112L .RE .sp \fBfstatat\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 .PD .ad .SH BESCHREIBUNG .PP Diese Funktionen geben Informationen über eine Datei im Puffer zurück, auf den \fIbuf\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. \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. \fBfstat\fP ist ähnlich \fBstat\fP, außer dass die Datei, zu der Informationen ermittelt werden sollen, durch den Dateideskriptor \fIfd\fP angegeben wird. .PP Alle diese Systemaufrufe geben eine Struktur vom Typ \fIstat\fP zurück, die folgendermaßen aufgebaut ist: .PP .in +4n .nf struct stat { dev_t st_dev; /* Gerät */ ino_t st_ino; /* Inode */ mode_t st_mode; /* Dateityp und \-modus */ nlink_t st_nlink; /* Anzahl harter Links */ uid_t st_uid; /* UID des Besitzers */ gid_t st_gid; /* GID des Besitzers */ dev_t st_rdev; /* Typ (wenn Inode\-Gerät) */ off_t st_size; /* Größe in Bytes*/ blksize_t st_blksize; /* Blockgröße für Dateisystem\-E/A */ blkcnt_t st_blocks; /* Anzahl der zugewiesenen 512B\-Blöcke */ /* Seit Linux 2.6 unterstützt der Kernel Nanosekundengenauigkeit für die folgenden Zeitstempelfelder. Für Details vor Linux 2.6 lesen Sie ANMERKUNGEN. */ struct timespec st_atim; /* Zeit des letzten Zugriffs */ struct timespec st_mtim; /* Zeit der letzten Veränderung*/ struct timespec st_ctim; /* Zeit der letzten Statusänderung*/ #define st_atime st_atim.tv_sec /* Rückwärtskompatibilität */ #define st_mtime st_mtim.tv_sec #define st_ctime st_ctim.tv_sec }; .fi .in \fIHinweis:\fP Die Reihenfolge der Felder in der \fIstat\fP\-Struktur ist in den verschiedenen Architekturen nicht gleich. Außerdem zeigt die oben genannte Definition nicht die Auffüll\-Bytes, die in verschiedenen Architekturen zwischen einigen Feldern vorhanden sind. Im Quellcode von Glibc und Kernel finden Sie bei Bedarf Details hierzu. .\" 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. Das Feld \fIst_dev\fP beschreibt das Gerät, auf dem sich die Datei befindet. (Die Makros \fBmajor\fP(3) und \fBminor\fP(3) können zum Zerlegen der Geräte\-ID in diesem Feld nützlich sein.) Das Feld \fIst_rdev\fP beschreibt das Geräte, das diese Datei (Inode) repräsentiert. Das Feld \fIst_size\fP zeigt die Größe der Datei (falls es sich um eine reguläre Datei oder einen symbolischen Link handelt) in Bytes an. Die Größe des symbolischen Links ist die Länge des enthaltenen Pfadnamens ohne abschließendes Nullbyte. Das Feld \fIst_blocks\fP gibt die Anzahl der Blöcke, die der Datei zugewiesen sind, in 512\-Byte\-Einheiten an. Dies kann kleiner als \fIst_size\fP/512 sein, wenn die Datei Löcher enthält. Das Feld \fIst_blksize\fP gibt die »bevorzugte« Blockgröße für effiziente E/A\-Operationen des Dateisystems an (Schreiben in eine Datei in kleineren Teilen kann ineffizientes Lesen\-Ändern\-Schreiben verursachen). .PP Nicht alle der Linux\-Dateisysteme implementieren auch alle Zeitfelder. Einige Dateisystemtypen erlauben das Einhängen in einer Weise, dass Datei\- und/oder Verzeichniszugriffe keine Aktualisierung des Feldes \fIst_atime\fP bewirken (siehe \fInoatime\fP, \fInodiratime\fP und \fIrelatime\fP in \fBmount\fP(8) sowie diesbezügliche Informationen in \fBmount\fP(2)). Außerdem wird \fIst_atime\fP nicht aktualisiert, wenn eine Datei mit \fBO_NOATIME\fP geöffnet wird; siehe \fBopen\fP(2). Das Feld \fIst_atime\fP wird durch Dateizugriffe geändert, zum Beispiel durch \fBexecve\fP(2), \fBmknod\fP(2), \fBpipe\fP(2), \fButime\fP(2) und \fBread\fP(2) (von mehr als 0 Bytes). Andere Routinen, wie \fBmmap\fP(2), können \fIst_atime\fP ändern, müssen dies aber nicht. Das Feld \fIst_mtime\fP verändert sich beim Einsatz von dateimodifizierenden Operationen, z.B. durch \fBmknod\fP(2), \fBtruncate\fP(2), \fButime\fP(2) und \fBwrite\fP(2) (von mehr als null Bytes). Außerdem wird \fIst_mtime\fP durch das Anlegen oder Löschen von Dateien in diesem Verzeichnis geändert. Das Feld \fIst_mtime\fP wird \fInicht\fP durch Ändern von Besitzer, Gruppe, Hardlink\-Zähler oder Modus verändert. Das Feld \fIst_ctime\fP wird durch Beschreiben oder Setzen der Inode\-Informationen geändert (d.h. Besitzer, Gruppe, Link\-Zähler, Modus etc.). .PP POSIX benennt die Bits \fIst_mode\fP entsprechend der Maske \fBS_IFMT\fP (siehe unten) als den \fIDateityp\fP, die 12 Bits entsprechend der Maske 07777 als die \fIDateimodusbits\fP und die am wenigsten signifikanten 9 Bits (0777) als die \fIDateiberechtigungsbits\fP. .PP Die folgende Maskenwerte sind für den Dateityp des Feldes \fIst_mode\fP definiert: .in +4n .TS lB l l. S_IFMT 0170000 Bitmaske für das Dateityp\-Bitfeld S_IFSOCK 0140000 Socket S_IFLNK 0120000 symbolischer Link S_IFREG 0100000 reguläre Datei S_IFBLK 0060000 blockorientiertes Gerät S_IFDIR 0040000 Verzeichnis S_IFCHR 0020000 zeichenorientiertes Gerät S_IFIFO 0010000 FIFO .TE .in .PP Um beispielsweise eine reguläre Datei zu testen, könnten Sie Folgendes verwenden: .nf .in +4n stat(pathname, &sb); if ((sb.st_mode & S_IFMT) == S_IFREG) { /* reguläre Datei verarbeiten */ } .in .fi .PP Da Tests der obigen Form häufig sind, definiert POSIX zusätzliche Makros, um präzisere Tests des Dateityps in \fIst_mode\fP zu ermöglichen: .RS 4 .TP 1.2i \fBS_ISREG\fP(m) ist es eine reguläre Datei? .TP \fBS_ISDIR\fP(m) Verzeichnis? .TP \fBS_ISCHR\fP(m) zeichenorientiertes Gerät? .TP \fBS_ISBLK\fP(m) blockorientiertes Gerät? .TP \fBS_ISFIFO\fP(m) FIFO (benannte Pipe)? .TP \fBS_ISLNK\fP(m) symbolischer Link? (nicht in POSIX.1\-1996.) .TP \fBS_ISSOCK\fP(m) Socket? (Nicht in POSIX.1\-1996.) .RE .PP Der obige Code\-Schnipsel sollte daher folgendermaßen geändert werden: .nf .in +4n stat(pathname, &sb); if (S_ISREG(sb.st_mode)) { /* reguläre Datei verarbeiten */ } .in .fi .PP Die Definitionen der meisten der oben genannten Testmakros für Dateitypen werden bereitgestellt, sofern irgendeines der folgenden Feature\-Test\-Makros definiert ist: \fB_BSD_SOURCE\fP (in Glibc 2.19 und früher), \fB_SVID_SOURCE\fP (in Glibc 2.19 und früher) oder \fB_DEFAULT_SOURCE\fP (in Glibc 2.20 und neuer). Zusätzlich werden Definitionen aller oben genannten Makros außer \fBS_IFSOCK\fP und \fBS_ISSOCK\fP() bereitgestellt, wenn \fB_XOPEN_SOURCE\fP definiert ist. Die Definition von \fBS_IFSOCK\fP kann auch durch Setzen von \fB_XOPEN_SOURCE\fP auf einen Wert von 500 oder größer erreicht werden. Die Definition von \fBS_ISSOCK\fP() ist verfügbar, wenn eines der folgenden Feature\-Test\-Makros definiert ist: \fB_BSD_SOURCE\fP (in Glibc 2.19 und früher), \fB_DEFAULT_SOURCE\fP (in Glibc 2.20 und früher), \fB_XOPEN_SOURCE\fP mit einem Wert von 500 oder größer oder \fB_POSIX_C_SOURCE\fP mit einem Wert von 200112L oder größer. .PP Die folgende Maskenwerte sind für die Dateimodus\-Komponente des Felds \fIst_mode\fP definiert: .in +4n .TS lB l l. S_ISUID 04000 SUID\-Bit S_ISGID 02000 SGID\-Bit (siehe unten) S_ISVTX 01000 Sticky\-Bit (siehe unten) S_IRWXU 00700 Besitzer hat Lese\-, Schreib\- und Ausführungsrechte S_IRUSR 00400 Besitzer hat Lesezugriff S_IWUSR 00200 Besitzer hat Schreibzugriff S_IXUSR 00100 Besitzer hat Ausführungsrechte S_IRWXG 00070 Gruppe hat Lese\-, Schreib\- und Ausführungsrechte S_IRGRP 00040 Gruppe hat Leserechte S_IWGRP 00020 Gruppe hat Schreibzugriff S_IXGRP 00010 Gruppe hat Ausführungsrechte S_IRWXO 00007 T{ Andere (nicht in Gruppe) haben Lese\-, Schreib\- und Ausführungsrechte T} S_IROTH 00004 Andere haben Lesezugriff S_IWOTH 00002 Andere haben Schreibzugriff S_IXOTH 00001 Andere haben Ausführungsrechte .TE .in .P Das SGID\-Bit (\fBS_ISGID\fP) hat verschiedene besondere Nutzungsmöglichkeiten: Für ein Verzeichnis bedeutet es, das die BSD\-Semantik Anwendung findet: Dateien, die in ihm erzeugt werden, erben die Gruppen\-ID des Verzeichnisses und nicht die effektive Gruppen\-ID des erzeugenden Prozesses, und dort erzeugte Verzeichnisse haben das \fBSGID\fP\-Bit ebenfalls gesetzt. Für eine Datei, bei der das Bit für Gruppenausführungsrechte (\fBS_IXGRP\fP) nicht gesetzt ist, bedeutet es erzwungenes Sperren von Datei/Datensatz. .P .\" .\" Das »Sticky«\-Bit (\fBS_ISVTX\fP) an einem Verzeichnis bedeutet, dass eine Datei in diesem Verzeichnis nur vom Besitzer der Datei, dem Besitzer des Verzeichnisses, und von einem privilegierten Prozess umbenannt und gelöscht werden darf. .SS fstatat() Der Systemaufruf \fBfstatat\fP() funktioniert genauso wie \fBstat\fP(), außer den hier beschriebenen Unterschieden. Falls der in \fIPfadname\fP übergebene Pfadname relativ ist, wird er als relativ zu dem im Dateideskriptor \fIdirfd\fP referenzierten Verzeichnis interpretiert (statt relativ zum aktuellen Arbeitsverzeichnis des aufrufenden Prozesses, wie es bei \fBstat\fP() für einen relativen Pfadnamen erfolgt). Falls \fIPfadname\fP relativ ist und \fIdirfd\fP den besonderen Wert \fBAT_FDCWD\fP annimmt, wird \fIPfadname\fP als relativ zum aktuellen Arbeitsverzeichnis des aufrufenden Prozesses interpretiert (wie \fBstat\fP()). Falls \fIPfadname\fP absolut ist, wird \fIdirfd\fP ignoriert. \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 \fIdirfd\fP verweist (dies kann mit dem \fBO_PATH\fP\-Schalter von \fBopen\fP(2) ermittelt werden). Falls \fIdirfd\fP \fBAT_FDCWD\fP ist, erfolgt der Aufruf im aktuellen Arbeitsverzeichnis. In diesem Fall kann sich \fIdirfd\fP auf jeden Dateityp beziehen, nicht unbedingt ein Verzeichnis. 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) .\" Before glibc 2.16, defining _ATFILE_SOURCE sufficed Die Terminal\-»basename«\-Komponente von \fIPfadname\fP wird nicht automatisch eingehängt, wenn es ein Verzeichnis ist, das selbst ein Einhängepunkt ist. Dies ermöglicht dem Aufrufenden, Informationen zu einem Auto\-Einhängepunkt zu sammeln, anstatt zu dem Ort, der eingehängt werden würde. Dieser Schalter kann in Werkzeugen verwendet werden, die Verzeichnisse einlesen, um automatische Masseneinhängungen eines Verzeichnisses zu verhindern, welches Auto\-Einhängepunkte enthält. Der Schalter \fBAT_NO_AUTOMOUNT\fP ist unwirksam, wenn der Einhängepunkt bereits eingehängt wurde. Dieser Schalter ist Linux\-spezifisch; definieren Sie \fB_GNU_SOURCE\fP, um dessen Definition zu ermitteln. .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 entsprechend gesetzt. .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 \fIfd\fP ist kein zulässiger offener Dateideskriptor. .TP \fBEFAULT\fP Ungültige Adresse .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 \fIPfadname\fP ist die leere Zeichenkette. .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 \fBEOVERFLOW\fP \fIPfadname\fP oder \fIfd\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. .PP Die folgenden Fehler können zusätzlichen bei \fBfstatat\fP() auftreten: .TP \fBEBADF\fP \fIdirfd\fP ist kein zulässiger Dateideskriptor. .TP \fBEINVAL\fP Unzulässiger Schalter in \fISchalter\fP angegeben. .TP \fBENOTDIR\fP \fIPfadname\fP ist relativ und \fIdirfd\fP ist ein Dateideskriptor, der sich auf eine Datei statt auf ein Verzeichnis bezieht. .SH VERSIONEN \fBfstatat\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" .\" 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. \fBstat\fP(), \fBfstat\fP(), \fBlstat\fP(): SVr4, 4.3BSD, POSIX.1\-2001, POSIX.1.2008. \fBfstatat\fP(): POSIX.1\-2008. 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. 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. Falls Sie die Definition der Typen \fIblkcnt_t\fP oder \fIblksize_t\fP von \fI\fP ermitteln wollen, dann definieren Sie \fB_XOPEN_SOURCE\fP mit einem Wert von 500 oder größer (bevor Sie \fIirgendeine\fP Header\-Datei einbeziehen). .LP POSIX beschreibt die Konstanten \fBS_IFMT\fP, \fBS_IFSOCK\fP, \fBS_IFLNK\fP, \fBS_IFREG\fP, \fBS_IFBLK\fP, \fBS_IFDIR\fP, \fBS_IFCHR\fP, \fBS_IFIFO\fP, \fBS_ISVTX\fP \fInicht\fP, sondern verlangt stattdessen die Benutzung der Makros S_ISDIR() etc. Die \fBS_IF*\fP\-Konstanten sind in POSIX.1\-2001 und neuer vorhanden. Die Makros \fBS_ISLNK\fP() und \fBS_ISSOCK\fP() finden sich nicht in POSIX.1\-1996, sind aber beide in POSIX.1\-2001 vorhanden; ersteres ist aus SVID 4v2, letzteres aus SUSv2. .LP UNIX\ V7 (und später) hat \fBS_IREAD\fP, \fBS_IWRITE\fP, \fBS_IEXEC\fP, wobei POSIX die Synonyme \fBS_IRUSR\fP, \fBS_IWUSR\fP, \fBS_IXUSR\fP vorschreibt. .SS "Andere Systeme" Werte die von verschiedenen Systemen benutzt wurden oder werden: .ad l .TS l l l l l. Hex name ls Oktal Beschreibung f000 S_IFMT 170000 Maske für Dateityp 0000 000000 T{ SCO out\-of\-service Inode, BSD unbekannter Typ, SVID\-v2 und XPG2 haben beide 0 und 0100000 für normale Datei T} 1000 S_IFIFO p| 010000 FIFO (benannte Pipe) 2000 S_IFCHR c 020000 zeichenorientierte Spezialdatei (V7) 3000 S_IFMPC 030000 gemultiplexte zeichenorientierte Spezialdatei (V7) 4000 S_IFDIR d/ 040000 Verzeichnis (V7) 5000 S_IFNAM 050000 T{ XENIX benannte Spezialdatei mit zwei Untertypen, unterschieden durch \fIst_rdev\fP Werte 1, 2 T} 0001 S_INSEM s 000001 XENIX Semaphore\-Untertyp von IFNAM 0002 S_INSHD m 000002 XENIX geteilte\-Daten\-Untertyp von IFNAM 6000 S_IFBLK b 060000 blockorientierte Spezialdatei (V7) 7000 S_IFMPB 070000 gemultiplexte blockorientierte Spezialdatei (V7) 8000 S_IFREG \- 100000 regulär (V7) 9000 S_IFCMP 110000 VxFS\-komprimiert 9000 S_IFNWK n 110000 Netzwerk\-Spezialdatei (HP\-UX) a000 S_IFLNK l@ 120000 symbolischer Link (BSD) b000 S_IFSHAD 130000 T{ Solaris Schatten\-Inode für ACL (für Nutzer nicht sichtbar) T} c000 S_IFSOCK s= 140000 Socket (BSD; auch »S_IFSOC« auf VxFS) d000 S_IFDOOR D> 150000 Solaris Door e000 S_IFWHT w% 160000 BSD\-»Whiteout« (nicht für Inode benutzt) 0200 S_ISVTX 001000 T{ »Sticky«\-Bit: Text bleibt auf Swap auch nach Benutzung (V7) .br reserviert (SVID\-v2) .br Auf Nicht\-Verzeichnisse: diese Datei nicht zwischenspeichern (SunOS) .br Auf Verzeichnisse: Schalter für eingeschränktes Löschen (SVID\-v4.2) T} 0400 S_ISGID 002000 T{ Gruppen\-ID bei Ausführung setzen(V7) .br Für Verzeichnisse: BSD\-Semantik für Weitergeben der Gruppen\-ID benutzen T} 0400 S_ENFMT 002000 T{ 0400 S_ENFMT 002000 SysV Sperren der Datei erzwungen (gleicher Wert wie S_ISGID) T} 0800 S_ISUID 004000 set\-user\-ID bei Ausführung (V7) 0800 S_CDF 004000 T{ Verzeichnis ist eine kontextabhängige Datei (HP\-UX) T} .TE .ad Ein »sticky«\-Befehl tauchte in Version 32V AT&T UNIX auf. .SH ANMERKUNGEN Unter Linux löst \fBlstat\fP() generell keine Automounter\-Aktion aus, während \fBstat\fP() dies tut (aber siehe \fBfstatat\fP(2)). .\" Für Pseudodateien, die vom Kernel automatisch erstellt werden, liefert \fBstat\fP() keinen korrekten Wert im Feld \fIst_size\fP zurück. Beispielsweise wird der Wert 0 für viele Dateien im Verzeichnis \fI/proc\fP zurückgeliefert, während verschiedene Dateien unter \fI/sys\fP eine Größe von 4096 bytes melden, obwohl der Dateiinhalt kleiner ist. Für solche Dateien sollte einfach versucht werden, so viele Bytes wie möglich zu lesen (und \(aq\e0\(aq an den zurückgelieferten Puffer zu hängen, falls dieser als Zeichenkette interpretiert werden soll). .SS Zeitstempelfelder Ältere Kernel und ältere Standards unterstützen keine Zeitstempel\-Felder für Nanosekunden. Stattdessen gab es die drei Zeitstempel\-Felder – \fIst_atime\fP, \fIst_mtime\fP und \fIst_ctime\fP –, angegeben als \fItime_t\fP, die Zeitstempel mit Sekundengenauigkeit ergaben. Seit Kernel 2.5.48 unterstützt die \fIstat\fP\-Struktur die Nanosekunden\-Auflösung für die drei Zeitstempel\-Felder. Die Nanosekunden\-Komponenten jedes Zeitstempels sind durch Namen der Form \fIst_atim.tv_nsec\fP verfügbar, falls geeignete Feature\-Test\-Makros definiert sind. Nanosekunden\-Zeitstempel wurden in POSIX.1\-2008 standardisiert und seit Glibc\-Version 2.12 legt Glibc die Nanosekundenkomponentennamen offen, falls \fB_POSIX_C_SOURCE\fP mit einem Wert von 200809L oder größer oder \fB_XOPEN_SOURCE\fP mit einem Wert von 700 oder größer definiert ist. Bis einschließlich Glibc 2.19 sind die Definitionen der Nanosekundenkomponenten auch definiert, falls \fB_BSD_SOURCE\fP oder \fB_SVID_SOURCE\fP definiert sind. Falls keines der erwähnten Makros definiert ist, dann werden die Nanosekunden\-Werte mit Namen der Form \fIst_atimensec\fP angezeigt. .\" commit ef7f38359ea8b3e9c7f2cae9a4d4935f55ca9e80 Nanosekunden\-Zeitstempel werden von XFS, JFS, Btrfs und ext4 (seit Linux 2.6.23) unterstützt. Nanosekunden\-Zeitstempel werden von ext2, ext3 und Reiserfs nicht unterstützt. Auf Dateisystemen, die für Zeitstempel keine Sekundenbruchteile unterstützen, wird für die Nanosekunden\-Felder der Wert 0 zurückgegeben. .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(). Die Kernel\-interne 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. 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. .\" 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 BEISPIEL Das folgende Programm ruft \fBstat\fP() auf zeigt ausgewählte Felder der zurückgelieferten Struktur \fIstat\fP an. .nf #include #include #include #include #include int main(int argc, char *argv[]) { struct stat sb; if (argc != 2) { fprintf(stderr, "Aufruf: %s \en", argv[0]); exit(EXIT_FAILURE); } if (stat(argv[1], &sb) == \-1) { perror("stat"); exit(EXIT_FAILURE); } printf("Dateityp: "); switch (sb.st_mode & S_IFMT) { case S_IFBLK: printf("blockorientiertes Gerät\en"); break; case S_IFCHR: printf("zeichenorientiertes Gerät\en"); break; case S_IFDIR: printf("Verzeichnis\en"); break; case S_IFIFO: printf("FIFO/Pipe\en"); break; case S_IFLNK: printf("symbolischer Link\en"); break; case S_IFREG: printf("reguläre Datei\en"); break; case S_IFSOCK: printf("Socket\en"); break; default: printf("unbekannt?\en"); break; } printf("I\-Node number: %ld\en", (long) sb.st_ino); printf("Modus: %lo (oktal)\en", (unsigned long) sb.st_mode); printf("Link count: %ld\en", (long) sb.st_nlink); printf("Ownership: UID=%ld GID=%ld\en", (long) sb.st_uid, (long) sb.st_gid); printf("Preferred I/O block size: %ld bytes\en", (long) sb.st_blksize); printf("File size: %lld bytes\en", (long long) sb.st_size); printf("Blocks allocated: %lld\en", (long long) sb.st_blocks); printf("Letzte Statusänderung: %s", ctime(&sb.st_ctime)); printf("Letzter Dateizugriff: %s", ctime(&sb.st_atime)); printf("Letzte Dateiänderung: %s", ctime(&sb.st_mtime)); exit(EXIT_SUCCESS); } .fi .SH "SIEHE AUCH" \fBls\fP(1), \fBstat\fP(1), \fBaccess\fP(2), \fBchmod\fP(2), \fBchown\fP(2), \fBreadlink\fP(2), \fButime\fP(2), \fBcapabilities\fP(7), \fBsymlink\fP(7) .SH KOLOPHON Diese Seite ist Teil der Veröffentlichung 4.09 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 Jonas Rovan , Martin Schulze , Michael Piefel , Helge Kreutzmann und Mario Blättermann 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 .