stat

Autres langues

Langue: pl

Autres versions - même langue

Version: 1 Stycznia 1995 (openSuse - 09/10/07)

Autres sections - même nom

Section: 2 (Appels système)

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)