Provided by: manpages-pl-dev_20051117-1_all bug

NAZWA

       stat, fstat, lstat - pobierz status pliku

SKŁADNIA

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

OPIS

       Funkcje  te  zwracają  informacje  o  podanym  pliku.  Do uzyskania tej
       informacji nie są wymagane prawa dostępu do pliku,  lecz  konieczne  są
       prawa przeszukiwania katalogów, leżących na jego ścieżce.

       stat  zwraca  status  pliku wskazywanego przez file_name, ładując go do
       argumentu buf.

       lstat jest identyczny jak stat, lecz  nie  zwraca  on  statusu  plików,
       wskazywanych przez dowiązania, a status samego dowiązania.

       fstat  jest  identyczny  ze  stat,  lecz status jest zwracany dla pliku
       wskazywanego przez filedes (zwrócony przez open(2)).

       Wszystkie te funkcje zwracają strukturę stat, która jest  zadeklarowana
       następująco:

              struct stat
              {
                  dev_t         st_dev;      /* urządzenie */
                  ino_t         st_ino;      /* i-węzeł (inode) */
                  umode_t       st_mode;     /* ochrona */
                  nlink_t       st_nlink;    /* liczba dowiązań stałych (hardlinks) */
                  uid_t         st_uid;      /* ID użytkownika właściciela */
                  gid_t         st_gid;      /* ID grupy właściciela */
                  dev_t         st_rdev;     /* typ urządzenia (jeśli urządzenie inode) */
                  off_t         st_size;     /* całkowity rozmiar w bajtach */
                  unsigned long st_blksize;  /* wielkość bloku dla I/O systemu plików */
                  unsigned long st_blocks;   /* ilość zaalokowanych bloków */
                  time_t        st_atime;    /* czas ostatniego dostępu */
                  time_t        st_mtime;    /* czas ostatniej modyfikacji */
                  time_t        st_ctime;    /* czas ostatniej zmiany */
              };

       Zauważ,  że  st_blocks  nie  zawsze  musi  wyrażać  wielkość  w blokach
       wielkości st_blksize, i że st_blksize może zamiast tego dawać  wielkość
       "preferowanego" rozmiaru bloku dla efektywnego I/O.

       Nie wszystkie systemy plików Linuksa implementują wszystkie z tych pól.
       Zazwyczaj st_atime jest zmieniane przez  mknod(2),  utime(2),  read(2),
       write(2), and truncate(2).

       Zazwyczaj   st_mtime  jest  zmieniane  przez  mknod(2),  utime(2),  and
       write(2).  st_mtime nie jest zmieniane po zmianach właściciela,  grupy,
       liczby stałych (hardlinks) czy praw.

       Zazwyczaj  st_ctime  jest  zmieniane  przy  zapisywaniu  lub ustawianiu
       informacji i-węzła (np.  właściciela,  grupy,  liczby  dowiązań,  praw,
       itp).

       Następujące makra sprawdzają typ pliku:

              S_ISLNK(m)  czy dowiązanie symboliczne (symbolic link)?

              S_ISREG(m)  czy plik regularny?

              S_ISDIR(m)  katalog?

              S_ISCHR(m)  urządzenie znakowe?

              S_ISBLK(m)  urządzenie blokowe?

              S_ISFIFO(m) fifo?

              S_ISSOCK(m) gniazdo?

       Dla pola st_mode zdefiniowano następujące flagi:

              S_IFMT   00170000 maska bitowa dla pól bitowych typu pliku

              S_IFSOCK 0140000 gniazdo

              S_IFLNK  0120000 dowiązanie symboliczne (symbolic link)

              S_IFREG  0100000 plik regularny

              S_IFBLK  0060000 urządzenie blokowe

              S_IFDIR  0040000 katalog

              S_IFCHR  0020000 urządzenie znakowe

              S_IFIFO  0010000 fifo

              S_ISUID  0004000 bit `set UID'

              S_ISGID  0002000 bit `set GID'

              S_ISVTX  0001000 bit `sticky'

              S_IRWXU  00700  użytkownik  (właściciel pliku) ma prawa odczytu,
                       zapisu i wykonania

              S_IRUSR (S_IREAD)
                       00400 użytkownik ma prawa odczytu

              S_IWUSR (S_IWRITE)
                       00200 użytkownik ma prawa zapisu

              S_IXUSR (S_IEXEC)
                       00100 użytkownik ma prawa wykonania

              S_IRWXG  00070 grupa ma prawa odczytu, zapisu i wykonania

              S_IRGRP  00040 grupa ma prawa odczytu

              S_IWGRP  00020 grupa ma prawa zapisu

              S_IXGRP  00010 grupa ma prawa wykonania

              S_IRWXO  00007 inni mają prawa odczytu, zapisu i wykonania

              S_IROTH  00004 inni mają prawa odczytu

              S_IWOTH  00002 inni mają prawa zapisu

              S_IXOTH  00001 inni mają prawa wykonania

WARTOŚĆ ZWRACANA

       Po sukcesie zwracane jest zero. Po błędzie -1 i ustawiane jest errno.

BŁĘDY

       EBADF   filedes jest nieprawidłowy.

       ENOENT  Plik nie istnieje.

ZGODNE Z

       SVID (nie lstat()), AT&T (nie lstat()),  POSIX  (nie  lstat()),  X/OPEN
       (nie lstat()), BSD 4.3

ZOBACZ TAKŻE

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