.\" -*- coding: UTF-8 -*-
.\" Copyright (c) 1992 Drew Eckhardt (drew@cs.colorado.edu), March 28, 1992
.\" Parts Copyright (c) 1995 Nicolai Langfeldt (janl@ifi.uio.no), 1/1/95
.\" and Copyright (c) 2006, 2007, 2014 Michael Kerrisk <mtk.manpages@gmail.com>
.\"
.\" SPDX-License-Identifier: Linux-man-pages-copyleft
.\"
.\" Modified by Michael Haardt <michael@moria.de>
.\" Modified 1993-07-24 by Rik Faith <faith@cs.unc.edu>
.\" Modified 1995-05-18 by Todd Larason <jtl@molehill.org>
.\" Modified 1997-01-31 by Eric S. Raymond <esr@thyrsus.com>
.\" Modified 1995-01-09 by Richard Kettlewell <richard@greenend.org.uk>
.\" Modified 1998-05-13 by Michael Haardt <michael@cantor.informatik.rwth-aachen.de>
.\" Modified 1999-07-06 by aeb & Albert Cahalan
.\" Modified 2000-01-07 by aeb
.\" Modified 2004-06-23 by Michael Kerrisk <mtk.manpages@gmail.com>
.\" 2007-06-08 mtk: Added example program
.\" 2007-07-05 mtk: Added details on underlying system call interfaces
.\"
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.TH stat 2 "15 czerwca 2024 r." "Linux man\-pages 6.9.1" 
.SH NAZWA
stat, fstat, lstat, fstatat \- pobiera stan pliku
.SH BIBLIOTEKA
Standardowa biblioteka C (\fIlibc\fP, \fI\-lc\fP)
.SH SKŁADNIA
.nf
\fB#include <sys/stat.h>\fP
.P
\fBint stat(const char *restrict \fP\fIpathname\fP\fB,\fP
\fB         struct stat *restrict \fP\fIstatbuf\fP\fB);\fP
\fBint fstat(int \fP\fIfd\fP\fB, struct stat *\fP\fIstatbuf\fP\fB);\fP
\fBint lstat(const char *restrict \fP\fIpathname\fP\fB,\fP
\fB         struct stat *restrict \fP\fIstatbuf\fP\fB);\fP
.P
\fB#include <fcntl.h>           \fP/* Definicja stałych \fBAT_*\fP */
\fB#include <sys/stat.h>\fP
.P
\fBint fstatat(int \fP\fIdirfd\fP\fB, const char *restrict \fP\fIpathname\fP\fB,\fP
\fB         struct stat *restrict \fP\fIstatbuf\fP\fB, int \fP\fIflags\fP\fB);\fP
.fi
.P
.RS -4
Wymagane ustawienia makr biblioteki glibc (patrz \fBfeature_test_macros\fP(7)):
.RE
.P
\fBlstat\fP():
.nf
.\"   _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
    /* Od glibc 2.20 */ _DEFAULT_SOURCE
        || _XOPEN_SOURCE >= 500
        || /* Od glibc 2.10: */ _POSIX_C_SOURCE >= 200112L
        || /* glibc 2.19 i wcześniejsze */ _BSD_SOURCE
.fi
.P
\fBfstatat\fP():
.nf
    Od glibc 2.10:
        _POSIX_C_SOURCE >= 200809L
    Przed glibc 2.10:
        _ATFILE_SOURCE
.fi
.SH OPIS
Funkcje te zwracają informacje o podanym pliku w buforze wskazanym przez
\fIstatbuf\fP. Do uzyskania tej informacji nie są wymagane prawa dostępu do
samego pliku, lecz \[em] w przypadku \fBstat\fP, \fBfstatat\fP() i \fBlstat\fP()
\[em] konieczne są prawa wykonywania (przeszukiwania) do wszystkich
katalogów na prowadzącej do pliku ścieżce \fIpathname\fP.
.P
\fBstat\fP() i \fBfstatat\fP() pobierają informacje o pliku wskazanym przez
\fIpathname\fP; cechy wyróżniające \fBfstatat\fP() opisano poniżej.
.P
\fBlstat\fP() jest identyczny z \fBstat\fP(), lecz w przypadku gdy \fIpathname\fP
jest dowiązaniem symbolicznym, to zwraca informacje o samym dowiązaniu, a
nie pliku, do którego się to dowiązanie odwołuje.
.P
.\"
\fBfstat\fP() jest identyczny z \fBstat\fP(), z tym wyjątkiem, że plik o którym
mają być pobrane informacje, jest określony przez deskryptor pliku \fIfd\fP.
.SS "Struktura stat"
Wszystkie te funkcje zwracają strukturę \fIstat\fP (zob. \fBstat\fP(3type)).
.P
.\" Background: inode attributes are modified with i_mutex held, but
.\" read by stat() without taking the mutex.
\fIUwaga\fP: Dla zachowania wydajności i prostoty, różne pola w strukturze
\fIstat\fP mogą zawierać stany z różnych momentów wykonywania wywołania
systemowego. Przykładowo, jeśli \fIst_mode\fP lub \fIst_uid\fP zostanie zmieniony
przez inny proces za pomocą wywołania \fBchmod\fP(2) lub \fBchown\fP(2), \fBstat\fP()
może zwrócić stary \fIst_mode\fP razem z nowym \fIst_uid\fP albo stary \fIst_uid\fP
razem z nowym \fIst_mode\fP.
.SS fstatat()
Wywołanie systemowe \fBfstatat\fP() jest ogólniejszym interfejsem do
uzyskiwania dostępu do informacji o pliku, które może wciąż zapewnić
zachowanie identyczne do każdego z wywołań \fBstat\fP(), \fBlstat\fP() i
\fBfstat\fP().
.P
Jeśli ścieżka podana w \fIpathname\fP jest względna, jest to interpretowane w
odniesieniu do katalogu do którego odnosi się deskryptor pliku \fIdirfd\fP
(zamiast w odniesieniu do bieżącego katalogu roboczego procesu wywołującego,
jak w stosunku do ścieżek względnych robi to \fBstat\fP() i \fBlstat\fP()).
.P
Jeśli \fIpathname\fP jest względna a \fIdirfd\fP ma wartość specjalną \fBAT_FDCWD\fP,
to \fIpathname\fP jest interpretowana w odniesieniu do bieżącego katalogu
roboczego procesu wywołującego (jak \fBstat\fP() i \fBlstat\fP()).
.P
Jeśli ścieżka \fIpathname\fP jest bezwzględna, to \fIdirfd\fP jest ignorowane.
.P
\fIflags\fP mogą wynosić albo 0, albo składać się z co najmniej jednego z
poniższych znaczników zsumowanych bitowo (OR):
.TP 
\fBAT_EMPTY_PATH\fP (od Linuksa 2.6.39)
.\" commit 65cfc6722361570bfe255698d9cd4dccaf47570d
.\" Before glibc 2.16, defining _ATFILE_SOURCE sufficed
Jeśli \fIpathname\fP jest łańcuchem pustym, to działa na pliku do którego
odnosi się \fIdirfd\fP (który mógł zostać pozyskany za pomocą znacznika
\fBO_PATH\fP \fBopen\fP(2)). W takim przypadku \fIdirfd\fP może odnosić się do
każdego typu pliku, nie tylko katalogu, a zachowanie \fBfstatat\fP() jest
podobne do \fBfstat\fP(). Jeśli \fIdirfd\fP wynosi \fBAT_FDCWD\fP, to wywołanie
działa w bieżącym katalogu roboczym. Jest to opcja charakterystyczna dla
Linuksa, proszę zdefiniować \fB_GNU_SOURCE\fP, aby dostać się do jej definicji.
.TP 
\fBAT_NO_AUTOMOUNT\fP (od Linuksa 2.6.38)
Nie dokonuje automatycznego montowania składowej terminala
(\[Bq]basename\[rq]) ścieżki z \fIpathname\fP. Od Linuksa 3.1 znacznik ten jest
ignorowany. Od Linuksa 4.11 znacznik ten jest implikowany.
.TP 
\fBAT_SYMLINK_NOFOLLOW\fP
Jeśli \fIpathname\fP jest dowiązaniem symbolicznym, nie podąża za nim, w zamian
zwracając informacje o samym dowiązaniu, jak \fBlstat\fP(). Domyślnie
\fBfstatat\fP () podąża za dowiązaniami symbolicznymi, jak \fBstat\fP().)
.P
Więcej informacji o potrzebie wprowadzenia \fBfstatat\fP() można znaleźć w
podręczniku \fBopenat\fP(2).
.SH "WARTOŚĆ ZWRACANA"
Po pomyślnym zakończeniu zwracane jest zero. Po błędzie zwracane jest \-1 i
ustawiane \fIerrno\fP, wskazując błąd.
.SH BŁĘDY
.TP 
\fBEACCES\fP
Brak uprawnień do przeszukiwania jednego z katalogów w ścieżce zaczynającej
\fIpathname\fP (zob. też \fBpath_resolution\fP(7)).
.TP 
\fBEBADF\fP
\fIfd\fP nie jest prawidłowym otwartym deskryptorem pliku.
.TP 
\fBEBADF\fP
(\fBfstatat\fP())  \fIpathname\fP jest względne, lecz \fIdirfd\fP nie wynosi ani
\fBAT_FDCWD\fP, ani nie jest prawidłowym deskryptorem pliku.
.TP 
\fBEFAULT\fP
Niepoprawny adres.
.TP 
\fBEINVAL\fP
(\fBfstatat\fP())  Podano nieprawidłową opcję we \fIflags\fP.
.TP 
\fBELOOP\fP
Podczas rozwiązywania ścieżki napotkano zbyt wiele dowiązań symbolicznych.
.TP 
\fBENAMETOOLONG\fP
Ścieżka \fIpathname\fP jest zbyt długa.
.TP 
\fBENOENT\fP
Składnik \fIpathname\fP nie istnieje lub jest wiszącym dowiązaniem
symbolicznym.
.TP 
\fBENOENT\fP
\fIpathname\fP jest łańcuchem pustym, a we \fIflags\fP nie podano
\fBAT_EMPTY_PATH\fP.
.TP 
\fBENOMEM\fP
Brak pamięci (tj. pamięci jądra).
.TP 
\fBENOTDIR\fP
Składnik ścieżki \fIpathname\fP nie jest katalogiem.
.TP 
\fBENOTDIR\fP
(\fBfstatat\fP())  \fIpathname\fP jest względna, a \fIdirfd\fP jest deskryptorem
pliku odnoszącym się do pliku, zamiast do katalogu.
.TP 
\fBEOVERFLOW\fP
\fIpathname\fP lub \fIfd\fP odnosi się do pliku, numeru i\-węzła lub numeru bloków,
których rozmiar nie jest reprezentowalny w \- odpowiednio \- typie \fIoff_t\fP,
\fIino_t\fP, \fIblkcnt_t\fP. Błąd ten może wystąpić na przykład wtedy, gdy
aplikacja skompilowana na platformie 32\-bitowej bez
\fI\-D_FILE_OFFSET_BITS=64\fP wywoła \fBstat\fP () na pliku, którego rozmiar jest
większy niż \fI(1<<31)\-1\fP bajtów.
.SH STANDARDY
POSIX.1\-2008.
.SH HISTORIA
.TP 
\fBstat\fP()
.TQ
\fBfstat\fP()
.TQ
\fBlstat\fP()
.\" SVr4 documents additional
.\" .BR fstat ()
.\" error conditions EINTR, ENOLINK, and EOVERFLOW.  SVr4
.\" documents additional
.\" .BR stat ()
.\" and
.\" .BR lstat ()
.\" error conditions EINTR, EMULTIHOP, ENOLINK, and EOVERFLOW.
SVr4, 4.3BSD, POSIX.1\-2001.
.TP 
\fBfstatat\fP()
POSIX.1\-2008.  Linux 2.6.16, glibc 2.4.
.P
Według POSIX.1\-2001 \fBlstat\fP() na dowiązaniu symbolicznym powinien zwrócić
poprawne wartości tylko w polu \fIst_size\fP i w części pola \fIst_mode\fP
związanej z typem pliku struktury \fIstat\fP. POSIX.1\-2008 zaostrza tę
specyfikację, wymagając od \fBlstat\fP() zwracania poprawnych informacji we
wszystkich polach z wyjątkiem bitów trybu w \fIst_mode\fP.
.P
Używanie pól \fIst_blocks\fP i \fIst_blksize\fP może być nieprzenośne (były
wprowadzone w BSD; interpretacje różnią się zarówno między systemami, jak i
na jednym systemie, jeśli użyty jest zdalny system plików montowany po
NFS\-ie).
.SS "Różnice biblioteki C/jądra"
.\" See include/asm-i386/stat.h in the Linux 2.4 source code for the
.\" various versions of the structure definitions
Z upływem czasu, zwiększanie rozmiarów struktury \fIstat\fP doprowadziło do
powstania trzech kolejnych wersji funkcji \fBstat\fP(): \fIsys_stat\fP() (slot
\fI__NR_oldstat\fP), \fIsys_newstat\fP() (slot \fI__NR_stat\fP) i \fIsys_stat64()\fP
(slot \fI__NR_stat64\fP) na platformach 32\-bitowych takich jak i386. Pierwsze
dwie wersje były już obecne w Linuksie 1.0 (choć z różnymi nazwami),
ostatnią dodano w Linuksie 2.4. Podobne uwagi mają zastosowanie do
\fBfstat\fP() i \fBlstat\fP().
.P
Wewnątrzjądrowe wersje struktury \fIstat\fP, za pomocą których jądro obsługuje
te różne wersje, to odpowiednio:
.TP 
\fI__old_kernel_stat\fP
Oryginalna struktura z dość wąskimi polami i brakiem dopełnienia
(wyrównania).
.TP 
\fIstat\fP
Większe pole \fIst_ino\fP i dodane dopełnienie do różnych części struktury
pozwalające na późniejszą rozbudowę.
.TP 
\fIstat64\fP
Jeszcze większe pole \fIst_ino\fP, większe pola \fIst_uid\fP i \fIst_gid\fP aby
przyjąć rozszerzone w Linuksie 2.4 UID\-y i GID\-y do 32 bitów i różne inne
poszerzenia pól oraz jeszcze więcej dopełnień w strukturze (dopełnione bajty
zostały w końcu wykorzystane w Linuksie 2.6 po pojawieniu się 32\-bitowych
identyfikatorów urządzeń oraz części nanosekundowej w polach znaczników
czasowych).
.P
.\"
.\" A note from Andries Brouwer, July 2007
.\"
.\" > Is the story not rather more complicated for some calls like
.\" > stat(2)?
.\"
.\" Yes and no, mostly no. See /usr/include/sys/stat.h .
.\"
.\" The idea is here not so much that syscalls change, but that
.\" the definitions of struct stat and of the types dev_t and mode_t change.
.\" This means that libc (even if it does not call the kernel
.\" but only calls some internal function) must know what the
.\" format of dev_t or of struct stat is.
.\" The communication between the application and libc goes via
.\" the include file <sys/stat.h> that defines a _STAT_VER and
.\" _MKNOD_VER describing the layout of the data that user space
.\" uses. Each (almost each) occurrence of stat() is replaced by
.\" an occurrence of xstat() where the first parameter of xstat()
.\" is this version number _STAT_VER.
.\"
.\" Now, also the definitions used by the kernel change.
.\" But glibc copes with this in the standard way, and the
.\" struct stat as returned by the kernel is repacked into
.\" the struct stat as expected by the application.
.\" Thus, _STAT_VER and this setup cater for the application-libc
.\" interface, rather than the libc-kernel interface.
.\"
.\" (Note that the details depend on gcc being used as c compiler.)
Funkcja opakowująca glibc \fBstat\fP() ukrywa te detale przed użytkownikami,
wywołując najnowszą wersję wywołania systemowego udostępnianą przez jądra i
przepakowując zwracane informacje, jeśli jest to wymagane, dla starszych
plików wykonywalnych.
.P
Na współczesnych systemach 64\-bitowych wszystko jest prostsze: istnieje
jedno wywołanie systemowe \fBstat\fP(), a jądro wykorzystuje strukturę \fIstat\fP
zawierającą pola o wystarczającym rozmiarze.
.P
.\" strace(1) shows the name "newfstatat" on x86-64
Wywołanie systemowe niższego stopnia używane przez funkcję opakowującą
\fBfstatat\fP() glibc nazywa się w rzeczywistości \fBfstatat64\fP() lub, na
niektórych architekturach, \fBnewfstatat\fP().
.SH PRZYKŁADY
Poniższy program wywołuje \fBlstat\fP() i wypisuje wybrane pola zwrócone w
strukturze \fIstat\fP:
.P
.\" SRC BEGIN (stat.c)
.EX
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/sysmacros.h>
#include <time.h>
\&
int
main(int argc, char *argv[])
{
    struct stat sb;
\&
    if (argc != 2) {
        fprintf(stderr, "Użycie: %s <ścieżka>\[rs]n", argv[0]);
        exit(EXIT_FAILURE);
    }
\&
    if (lstat(argv[1], &sb) == \-1) {
        perror("lstat");
        exit(EXIT_FAILURE);
    }
\&
    printf("ID urządzenia:  [%x,%x]\[rs]n",
           major(sb.st_dev),
           minor(sb.st_dev));
\&
    printf("Typ pliku:                ");
\&
    switch (sb.st_mode & S_IFMT) {
    case S_IFBLK:  printf("urządzenie blokowe\[rs]n");      break;
    case S_IFCHR:  printf("urządzenie znakowe\[rs]n");      break;
    case S_IFDIR:  printf("katalog\[rs]n");                 break;
    case S_IFIFO:  printf("FIFO/potok\[rs]n");              break;
    case S_IFLNK:  printf("dowiązanie symboliczne\[rs]n");  break;
    case S_IFREG:  printf("zwykły plik\[rs]n");             break;
    case S_IFSOCK: printf("gniazdo\[rs]n");                 break;
    default:       printf("typ nieznany\[rs]n");            break;
    }
\&
    printf("Numer i\-węzła:            %ju\[rs]n", (uintmax_t) sb.st_ino);
\&
    printf("Tryb:                     %jo (ósemkowo)\[rs]n",
           (uintmax_t) sb.st_mode);
\&
    printf("Liczba dowiązań:          %ju\[rs]n", (uintmax_t) sb.st_nlink);
    printf("Właściciel:               UID=%ju   GID=%ju\[rs]n",
           (uintmax_t) sb.st_uid, (uintmax_t) sb.st_gid);
\&
    printf("Preferowany rozmiar bloku I/O: %jd bajtów\[rs]n",
           (intmax_t) sb.st_blksize);
    printf("Rozmiar bloku:                 %jd bajtów\[rs]n",
           (intmax_t) sb.st_size);
    printf("Liczba przydzielonych bloków:  %jd\[rs]n",
           (intmax_t) sb.st_blocks);
\&
    printf("Ostatnia zmiana stanu:    %s", ctime(&sb.st_ctime));
    printf("Ostatni dostęp do pliku:  %s", ctime(&sb.st_atime));
    printf("Ostatnia zmiana pliku:    %s", ctime(&sb.st_mtime));
\&
    exit(EXIT_SUCCESS);
}
.EE
.\" SRC END
.SH "ZOBACZ TAKŻE"
\fBls\fP(1), \fBstat\fP(1), \fBaccess\fP(2), \fBchmod\fP(2), \fBchown\fP(2),
\fBreadlink\fP(2), \fBstatx\fP(2), \fButime\fP(2), \fBstat\fP(3type),
\fBcapabilities\fP(7), \fBinode\fP(7), \fBsymlink\fP(7)
.PP
.SH TŁUMACZENIE
Autorami polskiego tłumaczenia niniejszej strony podręcznika są:
Przemek Borys <pborys@dione.ids.pl>,
Robert Luberda <robert@debian.org>
i
Michał Kułach <michal.kulach@gmail.com>
.
.PP
Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach
licencji można uzyskać zapoznając się z
.UR https://www.gnu.org/licenses/gpl-3.0.html
GNU General Public License w wersji 3
.UE
lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.
.PP
Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy
dyskusyjnej
.MT manpages-pl-list@lists.sourceforge.net
.ME .
