stat

STAT(2)                          Systemaufrufe                         STAT(2)



BEZEICHNUNG
       stat, fstat, lstat - Ermittle Dateistatus

ÃBERSICHT
       #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);

UEBERBLICK
       Beim Aufruf geben diese Funktionen Informationen über die angegebene
       Datei zurück.  Dazu benötigt man keinerlei Rechte an der angegebene
       Datei, sehr wohl aber die ''Search''-Rechte im rekursiven Pfad zu
       dieser Datei.

       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 der bezogenen Datei an buf übergeben werden.

       fstat ist wie stat, doch wird statt file_name die, von -I fopen(3)
       übergebene filedes verwendet.


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

              struct stat
              {
                  dev_t         st_dev;      /* Device */
                  ino_t         st_ino;      /* INode */
                  umode_t       st_mode;     /* Protection */
                  nlink_t       st_nlink;    /* Anzahl d. Hard_Links */
                  uid_t         st_uid;      /* UID des Besitzers */
                  gid_t         st_gid;      /* GID des Besitzers */
                  dev_t         st_rdev;     /* Typ (wenn INode-Device) */
                  off_t         st_size;     /* Grösse in Bytes*/
                  unsigned long st_blksize;  /* Blockgrösse */
                  unsigned long st_blocks;   /* Allozierte Blocks */
                  time_t        st_atime;    /* Letzter Zugriff */
                  time_t        st_mtime;    /* Letzte Modifikation */
                  time_t        st_ctime;    /* Letzte Aenderung */
              };

       CAVEAT:

       st_blocks muss nicht unbedingt die Blockgrösse darstellen und
       st_blksize kann auch die optimale Blockgrösse für die
       Dateioperationen angeben.

       Nicht alle, von Linux unterstützte, Dateisysteme verwenden alle
       Felder.  Normalerweise ändert sich st_atime durch den Einsatz von
       mknod(2), utime(2), read(2), write(2), und truncate(2).

       st_mtime verändert sich beim Einsatz von mknod(2), utime(2), und
       write(2).

       st_mtime wird nicht durch Ãndern von Besitzer, Gruppe, Hardlink-Count,
       oder Mode verändert.

       st_ctime wird durch das Aendern der INode-Informationen neu gesetzt.


       Folgende Makros sind für den Dateityp definiert:

              S_ISLNK(m)  Testet auf einen Symbolischen Link,

              S_ISREG(m)  auf reguläre Dateien,

              S_ISDIR(m)  auf Verzeichnisse,

              S_ISCHR(m)  checkt auf Character-Devices,

              S_ISBLK(m)  auf Block-Devices, während

              S_ISFIFO(m) auf FiFos und

              S_ISSOCK(m) auf Sockets überprüft.

       Folgende Flags sind für st_mode definiert:

              S_IFMT   00170000 Bitmaske für den Dateityp

              S_IFSOCK 0140000 Sockets

              S_IFLNK  0120000 Symbolische Links

              S_IFREG  0100000 reguläre Dateien

              S_IFBLK  0060000 Block-Devices

              S_IFDIR  0040000 Verzeichnisse

              S_IFCHR  0020000 Char-Devices

              S_IFIFO  0010000 FIFOs

              S_ISUID  0004000 SUID-bit

              S_ISGID  0002000 SGID-bit

              S_ISVTX  0001000 Stickybit ( Wer's braucht :) )

              S_IRWXU  00700 rwx für (u)ser

              S_IRUSR (S_IREAD)
                       00400 r-- für (u)ser

              S_IWUSR (S_IWRITE)
                       00200 -w- für (u)ser

              S_IXUSR (S_IEXEC)
                       00100 --x für (u)ser

              S_IRWXG  00070 rwx für (g)roup

              S_IRGRP  00040 r-- für (g)roup

              S_IWGRP  00020 -w- für (g)roup

              S_IXGRP  00010 --x für (g)roup

              S_IRWXO  00007 rwx für (o)thers

              S_IROTH  00004 r-- für (o)thers

              S_IWOTH  00002 -w- für (o)thers

              S_IXOTH  00001 --x für (o)thers

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

FEHLER
       EBADF  filedes falsch oder nicht vorhanden.

       ENOENT Datei existiert nicht.

KONFORM ZU
       SVID (not lstat()), AT&T (not lstat()), POSIX (not lstat()), X/OPEN
       (not lstat()), BSD 4.3

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.



Linux 1.2.13                    6. Februar 1996                        STAT(2)