.\" -*- 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 "3 maja 2023 r." "Linux man\-pages 6.05.01" 
.SH NAZWA
stat, fstat, lstat, fstatat \- pobieranie stanu pliku
.SH BIBLIOTEKA
Standardowa biblioteka C (\fIlibc\fP, \fI\-lc\fP)
.SH SKŁADNIA
.nf
\fB#include <sys/stat.h>\fP
.PP
\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
.PP
\fB#include <fcntl.h>           \fP/* Definicja stałych \fBAT_*\fP */
\fB#include <sys/stat.h>\fP
.PP
\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
.PP
.RS -4
Wymagane ustawienia makr biblioteki glibc (patrz \fBfeature_test_macros\fP(7)):
.RE
.PP
\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
.PP
\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.
.PP
\fBstat\fP() i \fBfstatat\fP() pobierają informacje o pliku wskazanym przez
\fIpathname\fP; cechy wyróżniające \fBfstatat\fP() opisano poniżej.
.PP
\fBlstat\fP()  is identical to \fBstat\fP(), except that if \fIpathname\fP is a
symbolic link, then it returns information about the link itself, not the
file that the link refers to.
.PP
.\"
\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 "The stat structure"
All of these system calls return a \fIstat\fP structure (see \fBstat\fP(3type)).
.PP
.\" 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()
The \fBfstatat\fP()  system call is a more general interface for accessing file
information which can still provide exactly the behavior of each of
\fBstat\fP(), \fBlstat\fP(), and \fBfstat\fP().
.PP
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()).
.PP
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()).
.PP
Jeśli ścieżka \fIpathname\fP jest bezwzględna, to \fIdirfd\fP jest ignorowane.
.PP
\fIflags\fP mogą wynosić albo 0, albo składać się z co najmniej jednej z
poniższych opcji połączonych operatorem OR:
.TP 
\fBAT_EMPTY_PATH\fP (od Linuksa 2.6.39)
.\" commit 65cfc6722361570bfe255698d9cd4dccaf47570d
.\" Before glibc 2.16, defining _ATFILE_SOURCE sufficed
If \fIpathname\fP is an empty string, operate on the file referred to by
\fIdirfd\fP (which may have been obtained using the \fBopen\fP(2)  \fBO_PATH\fP
flag).  In this case, \fIdirfd\fP can refer to any type of file, not just a
directory, and the behavior of \fBfstatat\fP()  is similar to that of
\fBfstat\fP().  If \fIdirfd\fP is \fBAT_FDCWD\fP, the call operates on the current
working directory.  This flag is Linux\-specific; define \fB_GNU_SOURCE\fP to
obtain its definition.
.TP 
\fBAT_NO_AUTOMOUNT\fP (od Linuksa 2.6.38)
Don't automount the terminal ("basename") component of \fIpathname.\fP Since
Linux 3.1 this flag is ignored.  Since Linux 4.11 this flag is implied.
.TP 
\fBAT_SYMLINK_NOFOLLOW\fP
Jeśli \fIpathname\fP jest dowiązaniem symbolicznym nie podąża za nim, w zamian
zwraca informacje o samym dowiązaniu, jak \fBlstat\fP(). Domyślnie \fBfstatat\fP
() podąża za dowiązaniami symbolicznymi, jak \fBstat\fP().)
.PP
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 jest \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. (Patrz także \fBpath_resolution\fP(7)).
.TP 
\fBEBADF\fP
\fIfd\fP nie jest prawidłowym otwartym deskryptorem pliku.
.TP 
\fBEBADF\fP
(\fBfstatat\fP())  \fIpathname\fP is relative but \fIdirfd\fP is neither \fBAT_FDCWD\fP
nor a valid file descriptor.
.TP 
\fBEFAULT\fP
Niepoprawny adres.
.TP 
\fBEINVAL\fP
(\fBfstatat\fP())  Podano nieprawidłową opcję w \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 is an empty string and \fBAT_EMPTY_PATH\fP was not specified in
\fIflags\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.
.PP
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.
.PP
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().
.PP
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).
.PP
.\"
.\" 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.
.PP
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.
.PP
.\" 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:
.PP
.\" 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, "Usage: %s <pathname>\en", argv[0]);
        exit(EXIT_FAILURE);
    }
\&
    if (lstat(argv[1], &sb) == \-1) {
        perror("lstat");
        exit(EXIT_FAILURE);
    }
\&
    printf("ID of containing device:  [%x,%x]\en",
           major(sb.st_dev),
           minor(sb.st_dev));
\&
    printf("File type:                ");
\&
    switch (sb.st_mode & S_IFMT) {
    case S_IFBLK:  printf("block device\en");            break;
    case S_IFCHR:  printf("character device\en");        break;
    case S_IFDIR:  printf("directory\en");               break;
    case S_IFIFO:  printf("FIFO/pipe\en");               break;
    case S_IFLNK:  printf("symlink\en");                 break;
    case S_IFREG:  printf("regular file\en");            break;
    case S_IFSOCK: printf("socket\en");                  break;
    default:       printf("unknown?\en");                break;
    }
\&
    printf("I\-node number:            %ju\en", (uintmax_t) sb.st_ino);
\&
    printf("Mode:                     %jo (octal)\en",
           (uintmax_t) sb.st_mode);
\&
    printf("Link count:               %ju\en", (uintmax_t) sb.st_nlink);
    printf("Ownership:                UID=%ju   GID=%ju\en",
           (uintmax_t) sb.st_uid, (uintmax_t) sb.st_gid);
\&
    printf("Preferred I/O block size: %jd bytes\en",
           (intmax_t) sb.st_blksize);
    printf("File size:                %jd bytes\en",
           (intmax_t) sb.st_size);
    printf("Blocks allocated:         %jd\en",
           (intmax_t) sb.st_blocks);
\&
    printf("Last status change:       %s", ctime(&sb.st_ctime));
    printf("Last file access:         %s", ctime(&sb.st_atime));
    printf("Last file modification:   %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 .
