Rechercher une page de manuel

Chercher une autre page de manuel:

lstat

Autres langues

Langue: pl

Version: 2004\-06\-23 (ubuntu - 01/11/07)

Section: 2 (Appels système)

NAZWA

stat, fstat, lstat - pobiera status pliku

SK£ADNIA

#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 dostêpu do samego pliku, lecz --- w przypadku stat() i lstat() --- konieczne s± prawa wykonywania (przeszukiwania) do wszystkich katalogów na prowadz±cej do pliku ¶cie¿ce path.

stat() zwraca status pliku wskazywanego przez path, ³aduj±c 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 którego siê ten link odwo³uje.

fstat() jest identyczny z stat(), z tym wyj±tkiem, ¿e plik, którego status ma zwróciæ, jest okre¶lony przez deskryptor pliku filedes.

Wszystkie te funkcje zwracaj± strukturê stat, zawieraj±c± nastêpuj±ce pola:

 struct stat {
     dev_t     st_dev;      /* ID urz±dzenia zawieraj±cego plik */
     ino_t     st_ino;      /* numer i-wêz³a (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;     /* ID urz±dzenia (je¶li plik specjalny) */
     off_t     st_size;     /* ca³kowity rozmiar w bajtach */
     blksize_t st_blksize;  /* wielko¶æ bloku dla I/O systemu plików */
     blkcnt_t  st_blocks;   /* liczba 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 */
 };
 

Pole st_dev okre¶la urz±dzenie, na którym plik siê znajduje.

Pole st_rdev opisuje urz±dzenie reprezentowane przez ten plik (i-wêze³).

Pole st_size podaje rozmiar pliku w bajtach (je¿eli plik jest regularny lub jest dowi±zaniem symbolicznym). Rozmiarem dowi±zania symbolicznego jest d³ugo¶æ ¶cie¿ki, na któr± wskazuje, z wy³±czeniem koñcowego bajtu null.

Pole st_sblocks okre¶la liczbê bloków zajmowanych przez plik w jednostkach 512-bajtowych. (Liczba ta mo¿e byæ mniejsza ni¿ st_size/512, na przyk³ad wtedy, gdy plik ma dziury).

Pole st_blksize zawiera "preferowany" rozmiar bloku dla efektywnych operacji wej¶cia/wyj¶cia dla pliku (Zapis do pliku mniejszych kawa³ków mo¿e spowodowaæ nieefektywne operacje odczyt-modyfikacja-powtórny zapis).

Nie wszystkie systemy plików pod Linuksem obs³uguj± wszystkie pola czasu. Niektóre systemy plików mo¿na zamontowaæ w ten sposób, ¿e dostêp do pliku nie powoduje uaktualnienia pola st_atime. (Patrz `noatime' w mount(8)).

Pole st_atime jst zmieniane przez dostêp do pliku, np. przez execve(2), mknod(2), pipe(2), utime(2) i read(2) (w razie odczytania wiêcej ni¿ zera bajtów). 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) (wiêcej ni¿ zero bajtów). Co wiêcej st_mtime katalogu jest zmieniane przy tworzeniu plików w tym katalogu lub ich usuwaniu. Pole st_mtime nie jest zmieniane po zmianach w³a¶ciciela, grupy, liczby twardych linków (hardlinks) czy praw dowi±zañ.

Pole st_ctime jest zmieniane przy zapisywaniu lub ustawianiu informacji i-wêz³a (np. w³a¶ciciela, grupy, liczby dowi±zañ, praw itp.).

Zdefiniowane s± nastêpuj±ce makra POSIX sprawdzaj±ce typ pliku przy u¿yciu pola st_mode:

S_ISREG(m)
czy plik jest regularny?
S_ISDIR(m)
katalog?
S_ISCHR(m)
urz±dzenie znakowe?
S_ISBLK(m)
urz±dzenie blokowe?
S_ISFIFO(m)
kolejka FIFO (potok nazwany)?
S_ISLNK(m)
dowi±zanie symboliczne? (Nie w POSIX.1-1996).
S_ISSOCK(m)
gniazdo? (Nie w POSIX.1-1996).

Dla pola st_mode zdefiniowano nastêpuj±ce flagi:

S_IFMT 0170000 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 kolejka FIFO
S_ISUID 0004000 bit `set UID'
S_ISGID 0002000 bit `set-group-ID' (patrz ni¿ej)
S_ISVTX 0001000 bit `sticky' (patrz ni¿ej)
S_IRWXU 00700 maska praw dostêpu w³a¶ciciela pliku
S_IRUSR 00400 w³a¶ciciel ma prawa odczytu
S_IWUSR 00200 w³a¶ciciel ma prawa zapisu
S_IXUSR 00100 w³a¶ciciel ma prawa wykonania
S_IRWXG 00070 maska praw dostêpu 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æ u¿ywana semantyka BSD: pliki w nim utworzone dziedzicz± identyfikator grupy z katalogu, a nie z efektywnego identyfikatora grupy procesu tworz±cego plik, a tworzone katalogi bêd± mia³y tak¿e ustawiony bit S_ISGID. Dla pliku, który nie ma ustawionego bitu wykonywania dla grupy (S_IXGRP), bit `set-group-ID' oznacza obowi±zkowe blokowanie pliku/rekordu.

Bit `sticky' (S_ISVTX) ustawiony na katalogu oznacza, ¿e tylko w³a¶ciciel pliku lub w³a¶ciciel katalogu, lub proces uprzywilejowany mo¿e usun±æ plik w tym katalogu lub zmieniæ nazwê tego pliku.

UWAGI LINUKSOWE

Od wersji j±dra struktura stat obs³uguje nanosekundow± dok³adno¶æ wszystkich trzech pól czasowych. Glibc podaje nanosekundow± czê¶æ ka¿dego z tych pól, u¿ywaj±c albo st_atim.tv_nsec, je¿eli zdefiniowano makro _BSD_SOURCE lub _SVID_SOURCE, albo st_atimensec, je¿eli nie zdefiniowano ¿adnego z tych makr. W systemach plików, które nie obs³uguj± takiej dok³adno¶ci czasowej, warto¶ci nanosekund w tych polach wynosz± 0.

Dla wiêkszo¶ci plików w katalogu /proc, stat() w polu st_size zwraca 0, a nie rzeczywisty rozmiar pliku.

WARTO¦Æ ZWRACANA

Po sukcesie zwracane jest zero. Po b³êdzie -1 i ustawiane jest errno.

B£ÊDY

EACCES
Brak uprawnieñ do przeszukiwania jednego z katalogów w ¶cie¿ce zaczynaj±cej path. (Patrz tak¿e path_resolution(2)).
EBADF
filedes jest nieprawid³owy.
EFAULT
Niepoprawny adres.
ELOOP
Podczas rozwi±zywania ¶cie¿ki napotkano zbyt wiele dowi±zañ symbolicznych.
ENAMETOOLONG
Zbyt d³uga nazwa pliku.
ENOENT
Sk³adnik ¶cie¿ki path nie istnieje lub ¶cie¿ka jest pustym ³añcuchem znaków.
ENOMEM
Brak pamiêci (tj. pamiêci j±dra).
ENOTDIR
Sk³adnik ¶cie¿ki 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 nastêpuj±ce dodatkowe b³êdy fstat(): EINTR, ENOLINK i EOVERFLOW. SVr4 dokumentuje nastêpuj±ce dodatkowe b³êdy stat() i lstat(): EINTR, EMULTIHOP, ENOLINK i EOVERFLOW. U¿ywanie pól st_blocks i st_blksize mo¿e byæ ma³o przeno¶ne. (Zosta³y wprowadzone w BSD, nie s± podawane przez POSIX. Interpretacja ró¿ni siê miêdzy systemami, a nawet na jednym systemie, je¿eli zaanga¿owane s± montowania NFS).

Standard POSIX nie opisuje bitów S_IFMT, S_IFSOCK, S_IFLNK, S_IFREG, S_IFBLK, S_IFDIR, S_IFCHR, S_IFIFO, S_ISVTX, ale zamiast tego wymaga u¿ywania makr S_ISDIR(), itp. Makra S_ISLNK i S_ISSOCK nie wystêpuj± w POSIX.1-1996, ale oba bêd± w nastêpnej wersji standardu POSIX; pierwsze z tych makr jest wziête z SVID, a drugie z SUSv2.

Unix V7 (i kolejne systemy) mia³ S_IREAD, S_IWRITE, S_IEXEC, podczas gdy POSIX nakazuje u¿ywanie S_IRUSR, S_IWUSR, S_IXUSR.

INNE SYSTEMY

Warto¶ci, które by³y (lub nadal s±) w u¿yciu w ró¿nych systemach:
szesnastkowo nazwa ls ósemkowo opis
f000 S_IFMT 170000 maska bitowa dla pól bitowych typu pliku
0000 000000 niedzia³aj±cy i-wêze³ w SCO, nieznany typ w BSD
SVID-v2 i XPG2 maj± zarówno 0, jak i 0100000 dla zwyk³ego 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, rozró¿nianymi przez warto¶ci 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 dowi±zanie symboliczne (BSD)
b000 S_IFSHAD 130000 shadow i-wêze³ ACL w Solarisie (niedost. w przestrz. u¿ytkow.)
c000 S_IFSOCK s= 140000 gniazdo (BSD; tak¿e "S_IFSOC" na VxFS)
d000 S_IFDOOR D> 150000 drzwi Solarisa
e000 S_IFWHT w% 160000 BSD whiteout (nieu¿ywane dla i-wêz³a)

0200 S_ISVTX 001000 `bit sticky': zachowaj wyswappowany tekst nawet po u¿yciu(V7)
zarezerwowane (SVID-v2)
Dla niekatalogów: nie buforuj tego pliku (SunOS)
Dla katalogów: flaga ograniczonego usuwania (SVID-v4.2)
0400 S_ISGID 002000 set-group-ID podczas wykonywania (V7)
dla katalogów: u¿ywaj semantyki BSD propagowania ID grupy
0400 S_ENFMT 002000 egzekwowanie blokowanie plików SysV (dzielone z S_ISGID)
0800 S_ISUID 004000 set-user-ID podczas wykonywania (V7)
0800 S_CDF 004000 katalog jest plikiem zale¿nym od kontekstu (HP-UX)

Polecenie `sticky' pojawi³o siê w wersji32V systemu AT&T UNIX.

ZOBACZ TAK¯E

chmod(2), chown(2), fstatat(2), readlink(2), utime(2), capabilities(7)
Ma femme et moi, nous nous entendons parfaitement :
je n'essaie pas de diriger sa vie et
je n'essaie pas de diriger la mienne