Scroll to navigation

STAT(2) Podręcznik programisty Linuksa STAT(2)

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:

czy dowiązanie symboliczne (symbolic link)?
czy plik regularny?
katalog?
urządzenie znakowe?
urządzenie blokowe?
fifo?
gniazdo?

Dla pola st_mode zdefiniowano następujące flagi:

00170000 maska bitowa dla pól bitowych typu pliku
0140000 gniazdo
0120000 dowiązanie symboliczne (symbolic link)
0100000 plik regularny
0060000 urządzenie blokowe
0040000 katalog
0020000 urządzenie znakowe
0010000 fifo
0004000 bit `set UID'
0002000 bit `set GID'
0001000 bit `sticky'
00700 użytkownik (właściciel pliku) ma prawa odczytu, zapisu i wykonania
00400 użytkownik ma prawa odczytu
00200 użytkownik ma prawa zapisu
00100 użytkownik ma prawa wykonania
00070 grupa ma prawa odczytu, zapisu i wykonania
00040 grupa ma prawa odczytu
00020 grupa ma prawa zapisu
00010 grupa ma prawa wykonania
00007 inni mają prawa odczytu, zapisu i wykonania
00004 inni mają prawa odczytu
00002 inni mają prawa zapisu
00001 inni mają prawa wykonania

WARTOŚĆ ZWRACANA

Po sukcesie zwracane jest zero. Po błędzie -1 i ustawiane jest errno.

BŁĘDY

filedes jest nieprawidłowy.
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)

1 Stycznia 1995 Linux 1.1.75