Provided by: manpages-de-dev_0.10-1_all bug

NAME

       stat, fstat, lstat - Ermittle Dateistatus

       Diese  Handbuchseite ist eventuell veraltet. Im Zweifelsfall ziehen Sie
       die englischsprachige Handbuchseite zu Rate, indem Sie

              man -LC 2 stat

       eingeben.

ÜBERSICHT

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

       int stat(const char *file_name, struct stat *buf);
       int fstat(int filedes, struct stat *buf);
       int lstat(const char *file_name, struct stat *buf);

BESCHREIBUNG

       Beim Aufruf geben diese Funktionen Informationen  über  die  angegebene
       Datei  zurück.  Dazu  benötigt  man  keinerlei Rechte an der angegebene
       Datei, muss aber alle Verzeichnisse im Pfad durchsuchen dürfen, der  zu
       der Datei führt.

       stat  liefert  die  Informationen zu der in file_name angegebenen Datei
       und übergibt diese an buf.

       lstat ist ähnlich stat, nur dass bei Links Informationen zum  Link  und
       nicht zu der bezogenen Datei an buf übergeben werden.

       fstat  ist genauso wie stat, nur wird die offene Datei, auf die filedes
       (so wie von open(2) zurückgegeben) zeigt, bearbeitet anstatt file_name.

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

           struct stat
           {
               dev_t         st_dev;      /* Device */
               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*/
               unsigned long st_blksize;  /* Blockgröße */
               unsigned long st_blocks;   /* Allozierte Blocks */
               time_t        st_atime;    /* Letzter Zugriff */
               time_t        st_mtime;    /* Letzte Modifikation */
               time_t        st_ctime;    /* Letzte Aenderung */
           };

       st_blocks  gibt  die  Größe  der  Datei in 512-Byte-Blocks an. Der Wert
       st_blksize gibt die "bevorzugte" Blockgröße  für  die  Dateioperationen
       an.  (Eine  Datei  mit kleineren Happen zu schreiben kann ineffizientes
       Lesen-Verändern-Wiederschreiben verursachen.)

       Nicht alle von Linux unterstützten Dateisysteme verwenden alle  Felder.
       Einige  Dateisysteme  können  so eingebunden werden, dass Dateizugriffe
       das st_atime nicht modifizieren. (Siehe `noatime' in mount(8).)

       Normalerweise ändert sich  st_atime  durch  den  Einsatz  von  exec(2),
       mknod(2),  pipe(2),  utime(2)  und  read(2)  (von mehr als null Bytes).
       Andere Routinen, wie  mmap(2),  können,  müssen  aber  nicht,  st_atime
       modifizieren.

       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).  Darüber  hinaus  wird  st_mtime  von
       Verzeichnissen durch das Anlegen oder Löschen  von  Dateien  in  diesem
       Verzeichnis  geändert.  st_mtime  wird nicht durch Ändern von Besitzer,
       Gruppe, Hardlink-Zähler oder Modus verändert.

       st_ctime wird durch Beschreiben oder das Ändern der INode-Informationen
       neu gesetzt (also Besitzer, Gruppe, Link-Zähler, Modus etc.).

       Folgende POSIX-Makros sind definiert, um den Dateityp zu überprüfen:

              S_ISREG(m)  reguläre Datei,

              S_ISDIR(m)  Verzeichnis,

              S_ISCHR(m)  zeichenorientiertes Gerät,

              S_ISBLK(m)  blockorientiertes Gerät,

              S_ISFIFO(m) FiFo,

              S_ISLNK(m)  symbolische Verknüpfung (nicht in POSIX.1-1996) und

              S_ISSOCK(m) Socket (nicht in POSIX.1-1996).

       Folgende Flags sind für das st_mode-Feld definiert:

       S_IFMT     0017000   Bitmaske für die Dateityp-Bitfelder
       S_IFSOCK   0140000   Socket
       S_IFLNK    0120000   symbolische Verknüpfung
       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
       S_ISUID    0004000   SUID-Bit
       S_ISGID    0002000   SGID-Bit (siehe unten)
       S_ISVTX    0001000   Sticky-Bit (siehe unten)
       S_IRWXU    00700     Bitmaske für Besitzerzugriffsrechte
       S_IRUSR    00400     Besitzer hat Lesezugriff
       S_IWUSR    00200     Besitzer hat Schreibzugriff
       S_IXUSR    00100     Besitzer hat Ausführungsrechte
       S_IRWXG    00070     Bitmaske für Gruppenzugriffsrechte
       S_IRGRP    00040     Gruppe hat Lesezugriff
       S_IWGRP    00020     Gruppe hat Schreibzugriff
       S_IXGRP    00010     Gruppe hat Ausführungsrechte
       S_IRWXO    00007     Bitmaske für Zugriffsrechte Anderer (nicht in Gruppe)
       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 Locken von Datei/Datensatz.

       Das `Sticky'-Bit (S_ISVTX) an einem  Verzeichnis  bedeutet,  dass  eine
       Datei  in diesem Verzeichnis nur umbenannt und gelöscht werden darf vom
       Besitzer der Datei, dem Besitzer des Verzeichnisses, und von Root.

RÜCKGABEWERT

       Erfolg gibt 0, ein Fehler gibt -1 zurück und setzt errno entsprechend.

   FEHLER
       EBADF  filedes falsch oder nicht vorhanden.

       ENOENT Eine Komponente des Pfades file_name existiert nicht,  oder  der
              Pfad ist eine leere Zeichenkette.

       ENOTDIR
              Eine Komponente des Pfades ist kein Verzeichnis.

       ELOOP  Zu  viele  symbolische  Verknüpfungen  wurden entlang des Pfades
              gefunden.

       EACCES Zugriff verweigert.

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

       ENAMETOOLONG
              Dateiname ist zu lang.

KONFORM ZU

       Die stat- und fstat-Aufrufe sind zu SVr4, SVID, POSIX, X/OPEN  und  BSD
       4.3  konform.  Der  lstat-Aufruf  ist  konform zu 4.3BSD und SVr4. SVr4
       dokumentiert die zusätzlichen fstat-Fehlermeldungen EINTR, ENOLINK  und
       EOVERFLOW.   SVr4   dokumentiert  die  zusätzlichen  stat-  unf  lstat-
       Fehlermeldungen  EACCES,  EINTR,  EMULTIHOP,  ENOLINK  und   EOVERFLOW.
       Benutzung  der  st_blocks-  und  st_blksize-Felder kann unter Umständen
       weniger portabel sein. (Sie wurden in BSD eingeführt und sind nicht  in
       POSIX  spezifiziert.  Die Interpretation ist auf verschiedenen Systemen
       unterschiedlich, und möglicherweise auch auf  einem  einzelnen  System,
       wenn es mit NFS eingebundene Dateisysteme gibt.)

       POSIX  beschreibt die Bits S_IFMT, S_IFSOCK, S_IFLNK, S_IFREG, S_IFBLK,
       S_IFDIR,  S_IFCHR,  S_IFIFO  und  S_ISVTX   nicht,   sondern   verlangt
       stattdessen  die Benutzung der Makros S_ISDIR() etc. Die Makros S_ISLNK
       und S_ISSOCK finden sich nicht in POSIX.1-1996, werden aber im nächsten
       POSIX-Standard vorhanden sein; ersteres ist aus SVID 4v2, letzteres aus
       SUSv2.

       Unix V7 (und spätere Systeme) hatten S_IREAD, S_IWRITE und  S_IEXEC  wo
       POSIX die Synonyme S_IRUSR, S_IWUSR und 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 unbekannter Typ
                                       SVID-v2 und XPG2 haben sowohl 0 als auch 0100000
                                       für gewöhnliche Dateien
       1000   S_IFIFO    p|   010000   FiFo (benannte Pipe)
       2000   S_IFCHR    c    020000   zeichenorientiertes Spezialdatei (V7)
       3000   S_IFMPC         030000   Gemultiplexte zeichenorientiertes Spezialdatei (V7)
       4000   S_IFDIR    d/   040000   Verzeichnis (V7)
       5000   S_IFNAM         050000   XENIX benannte Spezialdatei
                                       mit zwei Untertypen, unterschieden durch st_rdev-Werte:
       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äre Datei (V7)
       9000   S_IFCMP         110000   VxFS komprimiert
       9000   S_IFNWK    n    110000   Netzwerk-Spezialdatei (HP-UX)
       a000   S_IFLNK    l@   120000   symbolische Verknüpfung (BSD)
       b000   S_IFSHAD        130000   Solaris Schatten-INode für ACL (nicht sichtbar für Nutzer)
       c000   S_IFSOCK   s=   140000   Socket (BSD; auch "S_IFSOC" auf VxFS)
       d000   S_IFDOOR   D>   150000   Solaris Tür (`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-Verz.: diese Datei nicht in den Cache (SunOS)
                                       Auf Verz.: Flag für eingeschränktes Löschen (SVID-v4.2)
       0400   S_ISGID         002000   Setze Gruppen-ID bei Ausführung (V7)
                                       für Verz.: benutze BSD-Semantics für Weitergeben der gid
       0400   S_ENFMT         002000   SysV Locken der Datei erzwungen (gleicher Wert wie S_ISGID)
       0800   S_ISUID         004000   setze Nutzer-ID bei Ausführung (V7)
       0800   S_CDF           004000   Verzeichnis ist eine kontextabhängige Datei (HP-UX)

       Ein `sticky'-Befehl tauchte in Version 32V AT&T UNIX auf.

SIEHE AUCH

       chmod(2), chown(2), readlink(2), utime(2).

DEUTSCH VON

       Jonas  Rovan  <jonas@blitz.de>,  der  das  GerMan-Projekt  für eine der
       besten Ideen  hält,  die  jemals  gehabt  wurden  und  Andries  Brouwer
       <aeb@win.tue.nl> für dessen Engagement herzlichst dankt.

       Neufassung © 2001 von Michael Piefel <piefel@informatik.hu-berlin.de>.