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

BEZEICHNUNG

       stat, fstat, lstat, fstatat - Dateistatus ermitteln

ÜBERSICHT

       #include <sys/types.h>
       #include <sys/stat.h>
       #include <unistd.h>

       int stat(const char *Pfadname, struct stat *Puffer);
       int fstat(int fd, struct stat *Puffer);
       int lstat(const char *Pfadname, struct stat *Puffer);

       #include <fcntl.h>           /* Definition der AT_*-Konstanten */
       #include <sys/stat.h>

       int fstatat(int dirfd, const char *Pfadname, struct stat *Puffer,
                   int Schalter);

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

       lstat():
           /* Glibc 2.19 und früher */ _BSD_SOURCE ||
           /* Seit Glibc 2.20 */_DEFAULT_SOURCE ||
           _XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
           || /* seit Glibc 2.10: */ _POSIX_C_SOURCE >= 200112L

       fstatat():
           Seit Glibc 2.10:
               _XOPEN_SOURCE >= 700 || _POSIX_C_SOURCE >= 200809L
           Bis Glibc 2.10:
               _ATFILE_SOURCE

BESCHREIBUNG

       Diese  Funktionen  geben  Informationen  über eine Datei im Puffer zurück, auf den buf zeigt. Dazu werden
       keinerlei Rechte an der angegebenen Datei benötigt, aber —im Falle von  stat(),  fstatat()  und  lstat()—
       müssen alle Verzeichnisse im Pfadnamen, der zu der Datei führt, durchsucht werden dürfen.

       stat() und fstatat() liefern die Informationen zu der in Pfadname angegebenen Datei und übergibt diese an
       fstatat(), wie nachfolgend beschrieben.

       lstat()  ist  ähnlich  stat(),  nur dass falls Pfadname ein symbolischer Link ist, Informationen zum Link
       zurückgegeben werden und nicht zur Datei, auf die der Link zeigt.

       fstat ist ähnlich stat, außer dass die Datei, zu der Informationen ermittelt  werden  sollen,  durch  den
       Dateideskriptor fd angegeben wird.

       Alle diese Systemaufrufe geben eine Struktur vom Typ stat zurück, die folgendermaßen aufgebaut ist:

           struct stat {
               dev_t         st_dev;      /* Gerät */
               ino_t         st_ino;      /* INode */
               mode_t        st_mode;     /* Zugriffsrechte */
               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
           };

       Hinweis:  Die  Reihenfolge  der  Felder in der stat-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.

       Note: For performance and simplicity reasons, different fields in the stat structure  may  contain  state
       information  from  different  moments during the execution of the system call. For example, if st_mode or
       st_uid is changed by another process by calling chmod(2)  or  chown(2),  stat()   might  return  the  old
       st_mode together with the new st_uid, or the old st_uid together with the new st_mode.

       Das  Feld st_dev beschreibt das Gerät, auf dem sich die Datei befindet. (Die Makros major(3) und minor(3)
       können zum Zerlegen der Geräte-ID in diesem Feld nützlich sein.)

       Das Feld st_rdev beschreibt das Geräte, das diese Datei (Inode) repräsentiert.

       Das Feld st_size 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  st_blocks gibt die Anzahl der Blöcke, die der Datei zugewiesen sind, in 512-Byte-Einheiten an.
       Dies kann kleiner als st_size/512 sein, wenn die Datei Löcher enthält.

       Das Feld st_blksize 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).

       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
       st_atime  bewirken (siehe noatime, nodiratime und relatime in mount(8) sowie diesbezügliche Informationen
       in mount(2)). Außerdem wird st_atime nicht aktualisiert, wenn eine Datei  mit  O_NOATIME  geöffnet  wird;
       siehe open(2).

       Das  Feld  st_atime  wird  durch Dateizugriffe geändert, zum Beispiel durch execve(2), mknod(2), pipe(2),
       utime(2) und read(2) (von mehr als 0 Bytes). Andere Routinen, wie mmap(2), können st_atime ändern, müssen
       dies aber nicht.

       Das Feld st_mtime verändert sich beim Einsatz von dateimodifizierenden Operationen, z.B. durch  mknod(2),
       truncate(2),  utime(2)  und  write(2) (von mehr als null Bytes). Außerdem wird st_mtime durch das Anlegen
       oder Löschen von Dateien in diesem Verzeichnis geändert. Das Feld st_mtime wird nicht  durch  Ändern  von
       Besitzer, Gruppe, Hardlink-Zähler oder Modus verändert.

       Das  Feld  st_ctime  wird  durch Beschreiben oder Setzen der Inode-Informationen geändert (d.h. Besitzer,
       Gruppe, Link-Zähler, Modus etc.).

       POSIX refers to the st_mode bits corresponding to the mask S_IFMT (see below) as the file  type,  the  12
       bits corresponding to the mask 07777 as the file mode bits and the least significant 9 bits (0777) as the
       file permission bits.

       Die folgende Maskenwerte sind für den Dateityp des Feldes st_mode definiert:
           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

       Um beispielsweise eine reguläre Datei zu testen, könnten Sie Folgendes verwenden:

           stat(pathname, &sb);
           if ((sb.st_mode & S_IFMT) == S_IFREG) {
               /* reguläre Datei verarbeiten */
           }

       Da  Tests  der  obigen  Form  häufig  sind,  definiert  POSIX  zusätzliche Makros, um präzisere Tests des
       Dateityps in st_mode zu ermöglichen:

           S_ISREG(m)  ist es eine reguläre Datei?

           S_ISDIR(m)  Verzeichnis?

           S_ISCHR(m)  zeichenorientiertes Gerät?

           S_ISBLK(m)  blockorientiertes Gerät?

           S_ISFIFO(m) FIFO (benannte Pipe)?

           S_ISLNK(m)  symbolischer Link? (nicht in POSIX.1-1996.)

           S_ISSOCK(m) Socket? (Nicht in POSIX.1-1996.)

       Der obige Code-Schnipsel sollte daher folgendermaßen geändert werden:

           stat(pathname, &sb);
           if (S_ISREG(sb.st_mode)) {
               /* reguläre Datei verarbeiten */
           }

       Die Definitionen der meisten der oben genannten Testmakros für Dateitypen werden  bereitgestellt,  sofern
       irgendeines  der  folgenden  Feature-Test-Makros  definiert  ist: _BSD_SOURCE (in Glibc 2.19 und früher),
       _SVID_SOURCE (in Glibc 2.19 und früher) oder _DEFAULT_SOURCE (in Glibc 2.20 und neuer). Zusätzlich werden
       Definitionen aller oben genannten Makros außer S_IFSOCK und S_ISSOCK() bereitgestellt, wenn _XOPEN_SOURCE
       definiert ist. Die Definition von S_IFSOCK kann auch durch Setzen von _XOPEN_SOURCE auf  einen  Wert  von
       500 oder größer erreicht werden.

       Die  Definition von S_ISSOCK() ist verfügbar, wenn eines der folgenden Feature-Test-Makros definiert ist:
       _BSD_SOURCE (in Glibc 2.19 und früher), _DEFAULT_SOURCE (in Glibc 2.20  und  früher),  _XOPEN_SOURCE  mit
       einem Wert von 500 oder größer oder _POSIX_C_SOURCE mit einem Wert von 200112L oder größer.

       Die folgende Maskenwerte sind für die Dateimodus-Komponente des Felds st_mode definiert:
           S_ISUID     04000   SUID-Bit
           S_ISGID     02000   SGID-Bit (siehe unten)
           S_ISVTX     01000   Sticky-Bit (siehe unten)

           S_IRWXU     00700   owner has read, write, and execute permission
           S_IRUSR     00400   Besitzer hat Lesezugriff
           S_IWUSR     00200   Besitzer hat Schreibzugriff
           S_IXUSR     00100   Besitzer hat Ausführungsrechte

           S_IRWXG     00070   group has read, write, and execute permission
           S_IRGRP     00040   group has read permission
           S_IWGRP     00020   Gruppe hat Schreibzugriff
           S_IXGRP     00010   Gruppe hat Ausführungsrechte

           S_IRWXO     00007   others  (not  in group) have read, write, and
                               execute permission
           S_IROTH     00004   Andere haben Lesezugriff
           S_IWOTH     00002   Andere haben Schreibzugriff
           S_IXOTH     00001   Andere haben Ausführungsrechte

       Das SGID-Bit (S_ISGID) 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  SGID-Bit  ebenfalls  gesetzt.  Für  eine  Datei,   bei   der   das   Bit   für
       Gruppenausführungsrechte   (S_IXGRP)   nicht   gesetzt   ist,   bedeutet   es   erzwungenes  Sperren  von
       Datei/Datensatz.

       Das »Sticky«-Bit (S_ISVTX) 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.

   fstatat()
       Der Systemaufruf fstatat() funktioniert genauso wie stat(), außer den hier beschriebenen Unterschieden.

       Falls der in Pfadname übergebene Pfadname relativ ist, wird er als  relativ  zu  dem  im  Dateideskriptor
       dirfd  referenzierten  Verzeichnis  interpretiert  (statt  relativ  zum  aktuellen Arbeitsverzeichnis des
       aufrufenden Prozesses, wie es bei stat() für einen relativen Pfadnamen erfolgt).

       Falls Pfadname relativ ist und dirfd den besonderen Wert AT_FDCWD annimmt, wird Pfadname als relativ  zum
       aktuellen Arbeitsverzeichnis des aufrufenden Prozesses interpretiert (wie stat()).

       Falls Pfadname absolut ist, wird dirfd ignoriert.

       Schalter kann entweder 0 sein oder durch bitweises ODER eines oder mehrere der folgenden Schalter gesetzt
       haben:

       AT_EMPTY_PATH (seit Linux 2.6.39)
              Falls  Pfadname eine leere Zeichenkette ist, wird mit der Datei gearbeitet, auf die dirfd verweist
              (dies kann mit dem O_PATH-Schalter von  open(2)  ermittelt  werden).  Falls  dirfd  AT_FDCWD  ist,
              erfolgt  der  Aufruf  im  aktuellen  Arbeitsverzeichnis.  In diesem Fall kann sich dirfd auf jeden
              Dateityp  beziehen,  nicht  unbedingt  ein  Verzeichnis.  Dieser  Schalter  ist  Linux-spezifisch;
              definieren Sie _GNU_SOURCE, um dessen Definition zu ermitteln.

       AT_NO_AUTOMOUNT (seit Linux 2.6.38)
              Die  Terminal-»basename«-Komponente  von  Pfadname  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 AT_NO_AUTOMOUNT ist unwirksam, wenn der Einhängepunkt bereits  eingehängt  wurde.  Dieser
              Schalter ist Linux-spezifisch; definieren Sie _GNU_SOURCE, um dessen Definition zu ermitteln.

       AT_SYMLINK_NOFOLLOW
              Falls  Pfadname  ein  symbolischer  Link  ist,  wird  er  nicht dereferenziert: Stattdessen werden
              Informationen zum Link selbst zurückgegeben, wie lstat().  In  der  Voreinstellung  dereferenziert
              fstatat() symbolische Links, wie auch stat().

       Lesen Sie openat(2) für eine Beschreibung der Notwendigkeit von fstatat().

RÜCKGABEWERT

       Bei  Erfolg  wird  Null  zurückgegeben.  Bei  einem  Fehler  wird -1 zurückgegeben und errno entsprechend
       gesetzt.

FEHLER

       EACCES Der Suchzugriff auf eines der Verzeichnisse im Pfadpräfix von  Pfadname  wurde  verweigert  (siehe
              auch path_resolution(7)).

       EBADF  fd ist falsch.

       EFAULT Ungültige Adresse

       ELOOP  Beim Pfaddurchlauf wurden zu viele symbolische Links gefunden.

       ENAMETOOLONG
              Pfadname ist zu lang.

       ENOENT Eine Komponente von Pfadname existiert nicht oder Pfadname ist die leere Zeichenkette.

       ENOMEM Kein Speicher mehr (das bedeutet Speicher im Kernel).

       ENOTDIR
              Eine Komponente des Pfadpräfixes von Pfadname ist kein Verzeichnis.

       EOVERFLOW
              Pfadname  oder  fd  bezieht  sich  auf eine Datei, deren Name, Inode-Anzahl oder Anzahl der Blöcke
              nicht durch die Typen off_t, ino_t oder blkcnt_t repräsentiert werden  kann.  Dieser  Fehler  kann
              beispielsweise  auftreten,  wenn  eine  auf  einer  32-bit-Plattform  kompilierte  Anwendung  ohne
              -D_FILE_OFFSET_BITS=64 stat() für eine Datei aufruft, deren Größe (1<<31)-1 Byte übersteigt.

       Die folgenden Fehler können zusätzlichen bei fstatat() auftreten:

       EBADF  dirfd ist kein zulässiger Dateideskriptor.

       EINVAL Unzulässiger Schalter in Schalter angegeben.

       ENOTDIR
              Pfadname ist relativ und dirfd ist ein Dateideskriptor, der sich auf  eine  Datei  statt  auf  ein
              Verzeichnis bezieht.

VERSIONEN

       fstatat() wurde zu Linux in Kernel 2.6.16 hinzugefügt; Bibliotheksunterstützung wurde zu Glibc in Version
       2.4 hinzugefügt.

KONFORM ZU

       stat(), fstat(), lstat(): SVr4, 4.3BSD, POSIX.1-2001, POSIX.1.2008.

       fstatat(): POSIX.1-2008.

       Entsprechend  POSIX.1-2001  benötigt  lstat() bei Anwendung auf einen symbolischen Link lediglich im Feld
       st_size und im Dateityp des st_mode-Feldes der stat-Struktur gültige Rückgabeinformationen.  POSIX.1-2008
       engt  diese  Spezifikation  ein,  indem  lstat() in allen Feldern außer den Modus-Bits in st_mode gültige
       Informationen zurückgeben muss.

       Die Verwendung der Felder st_blocks und st_blksize 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 blkcnt_t  oder
       blksize_t  von  <sys/stat.h>  ermitteln  wollen, dann definieren Sie _XOPEN_SOURCE mit einem Wert von 500
       oder größer (bevor Sie irgendeine Header-Datei einbeziehen).

       POSIX beschreibt die Konstanten S_IFMT, S_IFSOCK, S_IFLNK, S_IFREG, S_IFBLK, S_IFDIR,  S_IFCHR,  S_IFIFO,
       S_ISVTX  nicht, sondern verlangt stattdessen die Benutzung der Makros S_ISDIR() etc. Die S_IF*-Konstanten
       sind in POSIX.1-2001 und neuer vorhanden.

       Die Makros S_ISLNK() und S_ISSOCK() finden sich nicht in POSIX.1-1996, sind aber  beide  in  POSIX.1-2001
       vorhanden; ersteres ist aus SVID 4v2, letzteres aus SUSv2.

       UNIX V7  (und  später) hat S_IREAD, S_IWRITE, S_IEXEC, wobei POSIX die Synonyme S_IRUSR, S_IWUSR, S_IXUSR
       vorschreibt.

   Andere Systeme
       Werte die von verschiedenen Systemen benutzt wurden oder werden:
       Hex    name       ls   Oktal    Beschreibung
       f000   S_IFMT          170000   Maske für Dateityp
       0000                   000000   SCO out-of-service inode; BSD unknown type;
                                       SVID-v2 and XPG2 have both 0 and 0100000 for
                                       ordinary file
       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   XENIX named special file with two subtypes,
                                       distinguished by st_rdev values 1, 2
       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   regular (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   Solaris shadow inode for ACL (not seen by user
                                       space)
       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   »Sticky«-Bit: Text bleibt auf Swap auch nach
                                       Benutzung (V7)
                                       reserviert (SVID-v2)
                                       Auf Nicht-Verzeichnisse: diese Datei nicht
                                       zwischenspeichern (SunOS)
                                       Auf Verzeichnisse: Schalter für eingeschränktes
                                       Löschen (SVID-v4.2)
       0400   S_ISGID         002000   Gruppen-ID bei Ausführung setzen(V7)
                                       Für Verzeichnisse: BSD-Semantik für Weitergeben
                                       der Gruppen-ID benutzen
       0400   S_ENFMT         002000   0400 S_ENFMT        002000    SysV Sperren der
                                       Datei erzwungen (gleicher Wert wie S_ISGID)
       0800   S_ISUID         004000   set-user-ID on execution (V7)
       0800   S_CDF           004000   Verzeichnis ist eine kontextabhängige Datei
                                       (HP-UX)

       Ein »sticky«-Befehl tauchte in Version 32V AT&T UNIX auf.

ANMERKUNGEN

       Unter Linux löst lstat() generell keine Automounter-Aktion aus,  während  stat()  dies  tut  (aber  siehe
       fstatat(2)).

       Für  die  meisten  Dateien unterhalb des Verzeichnisses /proc liefert stat() nicht die Dateigröße im Feld
       st_size zurück, stattdessen wird das Feld mit dem Wert 0 zurückgeliefert.

   Zeitstempelfelder
       Ältere Kernel und ältere Standards unterstützen keine Zeitstempel-Felder  für  Nanosekunden.  Stattdessen
       gab  es  die  drei  Zeitstempel-Felder  —st_atime,  st_mtime  und  st_ctime—,  angegeben  als time_t, die
       Zeitstempel mit Sekundengenauigkeit ergaben.

       Seit  Kernel  2.5.48  unterstützt   die   stat-Struktur   die   Nanosekunden-Auflösung   für   die   drei
       Zeitstempel-Felder.   Die   Nanosekunden-Komponenten   jedes  Zeitstempels  sind  durch  Namen  der  Form
       st_atim.tv_nsec verfügbar, sofern das Feature-Test-Makro _BSD_SOURCE  oder  _SVID_SOURCE  definiert  ist.
       Nanosekunden-Zeitstempel sind heutzutage standardisiert, beginnend mit POSIX.1-2008, und die Glibc bietet
       seit  Version  2.12  ebenfalls  die Namen der Nanosekunden-Komponenten, wenn _POSIX_C_SOURCE mit dem Wert
       200809L oder größer oder _XOPEN_SOURCE mit dem Wert 700 oder  größer  definiert  ist.  Falls  keines  der
       erwähnten  Makros  definiert  ist,  dann  werden  die  Nanosekunden-Werte mit Namen der Form st_atimensec
       angezeigt.

       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.

   Unterschiede C-Bibliothek/Kernel
       Over time, increases in the size of the stat structure have led to three successive versions  of  stat():
       sys_stat()  (slot __NR_oldstat), sys_newstat()  (slot __NR_stat), and sys_stat64() (slot __NR_stat64)  on
       32-bit  platforms  such  as  i386.  The first two versions were already present in Linux 1.0 (albeit with
       different names); the last was added in Linux 2.4. Similar remarks apply for fstat()  and lstat().

       The  kernel-internal  versions  of  the  stat  structure  dealt  with  by  the  different  versions  are,
       respectively:

              __old_kernel_stat
                     The original structure, with rather narrow fields, and no padding.

              stat   Larger st_ino field and padding added to various parts of the structure to allow for future
                     expansion.

              stat64 Even  larger  st_ino  field,  larger  st_uid and st_gid fields to accommodate the Linux-2.4
                     expansion of UIDs and GIDs to 32 bits,  and  various  other  enlarged  fields  and  further
                     padding  in  the  structure.  (Various padding bytes were eventually consumed in Linux 2.6,
                     with the advent of 32-bit device IDs and nanosecond components for the timestamp fields.)

       The glibc stat()  wrapper function hides these  details  from  applications,  invoking  the  most  recent
       version of the system call provided by the kernel, and repacking the returned information if required for
       old binaries.

       On modern 64-bit systems, life is simpler: there is a single stat() system call and the kernel deals with
       a stat structure that contains fields of a sufficient size.

       Der  der Glibc-Wrapper-Funktion fstatat() zugrunde liegende Systemaufruf ist tatsächlich fstatat64() oder
       auf einigen Architekturen newfstatat().

BEISPIEL

       Das folgende Programm ruft stat() auf zeigt ausgewählte Felder der zurückgelieferten Struktur stat an.

       #include <sys/types.h>
       #include <sys/stat.h>
       #include <time.h>
       #include <stdio.h>
       #include <stdlib.h>

       int
       main(int argc, char *argv[])
       {
           struct stat sb;

           if (argc != 2) {
               fprintf(stderr, "Aufruf: %s <Pfadname>\n", 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\n");   break;
           case S_IFCHR:  printf("zeichenorientiertes Gerät\n"); break;
           case S_IFDIR:  printf("Verzeichnis\n");               break;
           case S_IFIFO:  printf("FIFO/Pipe\n");                 break;
           case S_IFLNK:  printf("symbolischer Link\n");         break;
           case S_IFREG:  printf("reguläre Datei\n");            break;
           case S_IFSOCK: printf("Socket\n");                    break;
           default:       printf("unbekannt?\n");                break;
           }

           printf("I-node number:            %ld\n", (long) sb.st_ino);

           printf("Modus:                    %lo (oktal)\n",
                   (unsigned long) sb.st_mode);

           printf("Link count:               %ld\n", (long) sb.st_nlink);
           printf("Ownership:                UID=%ld   GID=%ld\n",
                   (long) sb.st_uid, (long) sb.st_gid);

           printf("Preferred I/O block size: %ld bytes\n",
                   (long) sb.st_blksize);
           printf("File size:                %lld bytes\n",
                   (long long) sb.st_size);
           printf("Blocks allocated:         %lld\n",
                   (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);
       }

SIEHE AUCH

       ls(1), stat(1), access(2), chmod(2), chown(2), readlink(2), utime(2), capabilities(7), symlink(7)

KOLOPHON

       Diese Seite ist Teil der Veröffentlichung  4.04  des  Projekts  Linux-man-pages.  Eine  Beschreibung  des
       Projekts, Informationen, wie Fehler gemeldet werden können sowie die aktuelle Version dieser Seite finden
       sich unter http://www.kernel.org/doc/man-pages/.

ÜBERSETZUNG

       Die  deutsche  Übersetzung  dieser  Handbuchseite  wurde von Jonas Rovan <jonas@blitz.de>, Martin Schulze
       <joey@infodrom.org>, Michael Piefel  <piefel@debian.org>,  Helge  Kreutzmann  <debian@helgefjell.de>  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>.

Linux                                             23. Juli 2015                                          STAT(2)