Rechercher une page de manuel
lstat
Langue: pl
Version: 2004\-06\-23 (ubuntu - 01/11/07)
Section: 2 (Appels système)
NAZWA
stat, fstat, lstat - pobiera status plikuSK£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)je n'essaie pas de diriger sa vie et
je n'essaie pas de diriger la mienne
Contenus ©2006-2008 Benjamin Poulain
Design ©2006-2008 Maxime Vantorre