stat

Autres langues

Langue: pl

Autres versions - même langue

Version: 1 Stycznia 1995 (fedora - 25/11/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)