Provided by: manpages-de-dev_0.5-4.1ubuntu1_all bug

NAME

       stat, fstat, lstat - Ermittle Dateistatus

Ü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>.