Provided by: manpages-pl-dev_20060617-3_all bug

NAZWA

       stat, fstat, lstat - pobiera status pliku

SK/LADNIA

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

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

OPIS

       Funkcje  te  zwracaj  informacje  o  podanym  pliku.  Do  uzyskania tej
       informacji nie s wymagane prawa dostpu  do  samego  pliku,  lecz  --  w
       przypadku   stat()   i   lstat()   --  konieczne  s  prawa  wykonywania
       (przeszukiwania) do wszystkich katalogow na prowadzcej do  pliku  ciece
       path.

       stat()  zwraca  status  pliku  wskazywanego  przez  path,  ladujc go do
       argumentu buf.

       lstat() jest identyczny z  stat(),  lecz  w  przypadku  gdy  path  jest
       linkiem  symbolicznym,  to  zwraca  status  tego linka, a nie pliku, do
       ktorego si ten link odwoluje.

       fstat() jest identyczny z stat(),  z  tym  wyjtkiem,  e  plik,  ktorego
       status ma zwroci, jest okrelony przez deskryptor pliku filedes.

       Wszystkie te funkcje zwracaj struktur stat, zawierajc nastpujce pola:

         struct stat {
             dev_t     st_dev;      /* ID urzdzenia zawierajcego plik */
             ino_t     st_ino;      /* numer i-wzla (inode) */
             umode_t   st_mode;     /* ochrona */
             nlink_t   st_nlink;    /* liczba dowiza stalych (hardlinks) */
             uid_t     st_uid;      /* ID uytkownika wlaciciela */
             gid_t     st_gid;      /* ID grupy wlaciciela */
             dev_t     st_rdev;     /* ID urzdzenia (jeli plik specjalny) */
             off_t     st_size;     /* calkowity rozmiar w bajtach */
             blksize_t st_blksize;  /* wielko bloku dla I/O systemu plikow */
             blkcnt_t  st_blocks;   /* liczba zaalokowanych blokow */
             time_t    st_atime;    /* czas ostatniego dostpu */
             time_t    st_mtime;    /* czas ostatniej modyfikacji */
             time_t    st_ctime;    /* czas ostatniej zmiany */
         };

       Pole st_dev okrela urzdzenie, na ktorym plik si znajduje.

       Pole st_rdev opisuje urzdzenie reprezentowane przez ten plik (i-wzel).

       Pole  st_size podaje rozmiar pliku w bajtach (jeeli plik jest regularny
       lub jest dowizaniem symbolicznym).  Rozmiarem  dowizania  symbolicznego
       jest dlugo cieki, na ktor wskazuje, z wylczeniem kocowego bajtu null.

       Pole   st_sblocks   okrela   liczb  blokow  zajmowanych  przez  plik  w
       jednostkach 512-bajtowych. (Liczba ta moe by mniejsza  ni  st_size/512,
       na przyklad wtedy, gdy plik ma dziury).

       Pole  st_blksize  zawiera  "preferowany"  rozmiar bloku dla efektywnych
       operacji wejcia/wyjcia dla pliku (Zapis do  pliku  mniejszych  kawalkow
       moe spowodowa nieefektywne operacje odczyt-modyfikacja-powtorny zapis).

       Nie  wszystkie  systemy  plikow  pod  Linuksem  obsluguj wszystkie pola
       czasu. Niektore systemy plikow mona zamontowa w ten sposob, e dostp  do
       pliku  nie  powoduje  uaktualnienia  pola  st_atime. (Patrz `noatime' w
       mount(8)).

       Pole st_atime jst zmieniane przez dostp do pliku, np. przez  execve(2),
       mknod(2), pipe(2), utime(2) i read(2) (w razie odczytania wicej ni zera
       bajtow).  Inne  procedury,  jak  mmap(2)  mog,  ale  nie  musz,  zmieni
       st_atime.

       Zazwyczaj  pole  st_mtime jest zmieniane przez modyfikowanie pliku, np.
       przez  mknod(2),  truncate(2),  utime(2)  i  write(2)  (wicej  ni  zero
       bajtow).  Co  wicej  st_mtime  katalogu  jest  zmieniane przy tworzeniu
       plikow w  tym  katalogu  lub  ich  usuwaniu.  Pole  st_mtime  nie  jest
       zmieniane   po  zmianach  wlaciciela,  grupy,  liczby  twardych  linkow
       (hardlinks) czy praw dowiza.

       Pole st_ctime jest zmieniane przy zapisywaniu lub ustawianiu informacji
       i-wzla (np. wlaciciela, grupy, liczby dowiza, praw itp.).

       Zdefiniowane  s  nastpujce makra POSIX sprawdzajce typ pliku przy uyciu
       pola st_mode:

              S_ISREG(m)  czy plik jest regularny?

              S_ISDIR(m)  katalog?

              S_ISCHR(m)  urzdzenie znakowe?

              S_ISBLK(m)  urzdzenie blokowe?

              S_ISFIFO(m) kolejka FIFO (potok nazwany)?

              S_ISLNK(m)  dowizanie symboliczne? (Nie w POSIX.1-1996).

              S_ISSOCK(m) gniazdo? (Nie w POSIX.1-1996).

       Dla pola st_mode zdefiniowano nastpujce flagi:

       S_IFMT     0170000   maska bitowa dla pol bitowych typu pliku
       S_IFSOCK   0140000   gniazdo
       S_IFLNK    0120000   dowizanie symboliczne (symbolic link)
       S_IFREG    0100000   plik regularny
       S_IFBLK    0060000   urzdzenie blokowe
       S_IFDIR    0040000   katalog
       S_IFCHR    0020000   urzdzenie znakowe
       S_IFIFO    0010000   kolejka FIFO
       S_ISUID    0004000   bit `set UID'
       S_ISGID    0002000   bit `set-group-ID' (patrz niej)
       S_ISVTX    0001000   bit `sticky' (patrz niej)
       S_IRWXU    00700     maska praw dostpu wlaciciela pliku
       S_IRUSR    00400     wlaciciel ma prawa odczytu
       S_IWUSR    00200     wlaciciel ma prawa zapisu
       S_IXUSR    00100      wlaciciel ma prawa wykonania
       S_IRWXG    00070     maska praw dostpu dla grupy
       S_IRGRP    00040     grupa ma prawa odczytu
       S_IWGRP    00020     grupa ma prawa zapisu
       S_IXGRP    00010     grupa ma prawa wykonania
       S_IRWXO    00007     maska uprawnie dla innych (poza grup)
       S_IROTH    00004     inni maj prawa odczytu
       S_IWOTH    00002     inni maj prawa zapisu
       S_IXOTH    00001     inni maj prawa wykonania

       Bit `set-group-ID' (S_ISGID) ma kilka specjalnych znacze. Ustawiony  na
       katalogu  oznacza, e dla tego katalogu powinna by uywana semantyka BSD:
       pliki w nim utworzone dziedzicz identyfikator grupy z katalogu, a nie z
       efektywnego  identyfikatora  grupy  procesu  tworzcego plik, a tworzone
       katalogi bd mialy take ustawiony bit S_ISGID. Dla pliku, ktory  nie  ma
       ustawionego  bitu  wykonywania  dla grupy (S_IXGRP), bit `set-group-ID'
       oznacza obowizkowe blokowanie pliku/rekordu.

       Bit `sticky' (S_ISVTX) ustawiony na katalogu oznacza, e tylko wlaciciel
       pliku  lub wlaciciel katalogu, lub proces uprzywilejowany moe usun plik
       w tym katalogu lub zmieni nazw tego pliku.

UWAGI LINUKSOWE

       Od  wersji  jdra  struktura  stat   obsluguje   nanosekundow   dokladno
       wszystkich  trzech pol czasowych. Glibc podaje nanosekundow cz kadego z
       tych  pol,  uywajc  albo  st_atim.tv_nsec,  jeeli  zdefiniowano   makro
       _BSD_SOURCE lub _SVID_SOURCE, albo st_atimensec, jeeli nie zdefiniowano
       adnego z tych makr. W  systemach  plikow,  ktore  nie  obsluguj  takiej
       dokladnoci czasowej, wartoci nanosekund w tych polach wynosz 0.

       Dla wikszoci plikow w katalogu /proc, stat() w polu st_size zwraca 0, a
       nie rzeczywisty rozmiar pliku.

WARTO ZWRACANA

       Po sukcesie zwracane jest zero. Po bldzie -1 i ustawiane jest errno.

B/LDY

       EACCES Brak uprawnie do przeszukiwania  jednego  z  katalogow  w  ciece
              zaczynajcej path. (Patrz take path_resolution(2)).

       EBADF  filedes jest nieprawidlowy.

       EFAULT Niepoprawny adres.

       ELOOP  Podczas   rozwizywania   cieki   napotkano   zbyt  wiele  dowiza
              symbolicznych.

       ENAMETOOLONG
              Zbyt dluga nazwa pliku.

       ENOENT Skladnik cieki path nie istnieje lub cieka jest pustym  lacuchem
              znakow.

       ENOMEM Brak pamici (tj. pamici jdra).

       ENOTDIR
              Skladnik cieki nie jest katalogiem.

ZGODNE Z

       Funkcje  stat() i fstat() s zgodne z SVr4, SVID, POSIX, X/OPEN, 4.3BSD.
       Funkcja lstat() jest zgodna z 4.3BSD i SVr4. SVr4 dokumentuje nastpujce
       dodatkowe  bldy  fstat():  EINTR, ENOLINK i EOVERFLOW. SVr4 dokumentuje
       nastpujce dodatkowe bldy stat() i lstat(): EINTR, EMULTIHOP, ENOLINK  i
       EOVERFLOW.  Uywanie  pol  st_blocks  i st_blksize moe by malo przenone.
       (Zostaly wprowadzone w BSD, nie s podawane przez  POSIX.  Interpretacja
       roni  si midzy systemami, a nawet na jednym systemie, jeeli zaangaowane
       s montowania NFS).

       Standard POSIX  nie opisuje bitow S_IFMT, S_IFSOCK,  S_IFLNK,  S_IFREG,
       S_IFBLK,  S_IFDIR,  S_IFCHR,  S_IFIFO, S_ISVTX, ale zamiast tego wymaga
       uywania makr S_ISDIR(), itp. Makra S_ISLNK i  S_ISSOCK  nie  wystpuj  w
       POSIX.1-1996,  ale oba bd w nastpnej wersji standardu POSIX; pierwsze z
       tych makr jest wzite z SVID, a drugie z SUSv2.

       Unix V7 (i kolejne systemy) mial S_IREAD,  S_IWRITE,  S_IEXEC,  podczas
       gdy POSIX nakazuje uywanie S_IRUSR, S_IWUSR, S_IXUSR.

INNE SYSTEMY

       Wartoci, ktore byly (lub nadal s) w uyciu w ronych systemach:

       szesnastkowo   nazwa      ls   osemkowo   opis
       f000           S_IFMT          170000     maska bitowa dla pol bitowych typu pliku
       0000                           000000     niedzialajcy i-wzel w SCO, nieznany typ w BSD
                                                 SVID-v2 i XPG2 maj zarowno 0, jak i 0100000 dla zwyklego pliku
       1000           S_IFIFO    p|   010000     kolejka FIFO (potok nazwany)
       2000           S_IFCHR    c    020000     specjalny znakowy (V7)
       3000           S_IFMPC         030000     specjalny znakowy zwielokrotniony (V7)
       4000           S_IFDIR    d/   040000     katalog (V7)
       5000           S_IFNAM         050000     nazwany plik specjalny XENIXa
                                                 z dwoma podtypami, rozronianymi przez wartoci 1,2 w st_rdev:
       0001           S_INSEM    s    000001     podtyp IFNAM semafora XENIX
       0002           S_INSHD    m    000002     podtyp IFNAM dzielonych danych XENIX
       6000           S_IFBLK    b    060000     specjalny blokowy (V7)
       7000           S_IFMPB         070000     specjalny blokowy zwielokrotniony (V7)
       8000           S_IFREG    -    100000     regularny (V7)
       9000           S_IFCMP         110000     skompresowany VxFS
       9000           S_IFNWK    n    110000     sieciowy specjalny (HP-UX)
       a000           S_IFLNK    l@   120000     dowizanie symboliczne (BSD)
       b000           S_IFSHAD        130000     shadow i-wzel ACL w Solarisie (niedost. w przestrz. uytkow.)
       c000           S_IFSOCK   s=   140000     gniazdo (BSD; take "S_IFSOC" na VxFS)
       d000           S_IFDOOR   D>   150000     drzwi Solarisa
       e000           S_IFWHT    w%   160000     BSD whiteout (nieuywane dla i-wzla)

       0200           S_ISVTX         001000     `bit sticky': zachowaj wyswappowany tekst nawet po uyciu(V7)
                                                 zarezerwowane (SVID-v2)
                                                 Dla niekatalogow: nie buforuj tego pliku (SunOS)
                                                 Dla katalogow: flaga ograniczonego usuwania (SVID-v4.2)
       0400           S_ISGID         002000     set-group-ID podczas wykonywania (V7)
                                                 dla katalogow: uywaj semantyki BSD propagowania ID grupy
       0400           S_ENFMT         002000     egzekwowanie blokowanie plikow SysV (dzielone z S_ISGID)
       0800           S_ISUID         004000     set-user-ID podczas wykonywania (V7)
       0800           S_CDF           004000     katalog jest plikiem zalenym od kontekstu (HP-UX)

       Polecenie `sticky' pojawilo si w wersji32V systemu AT&T UNIX.

ZOBACZ TAKE

       chmod(2), chown(2), fstatat(2), readlink(2), utime(2), capabilities(7)

INFORMACJE O T/LUMACZENIU

       Powysze  tlumaczenie  pochodzi z nieistniejcego ju Projektu Tlumaczenia
       Manuali i moe nie by aktualne. W razie zauwaenia ronic  midzy  powyszym
       opisem  a  rzeczywistym  zachowaniem  opisywanego programu lub funkcji,
       prosimy o zapoznanie si z oryginaln (angielsk) wersj strony podrcznika.