Provided by:
manpages-pl-dev_20060617-3_all 
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.