.\" -*- 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 .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\" Modified by Michael Haardt .\" Modified 1993-07-24 by Rik Faith .\" Modified 1995-05-18 by Todd Larason .\" Modified 1997-01-31 by Eric S. Raymond .\" Modified 1995-01-09 by Richard Kettlewell .\" Modified 1998-05-13 by Michael Haardt .\" Modified 1999-07-06 by aeb & Albert Cahalan .\" Modified 2000-01-07 by aeb .\" Modified 2004-06-23 by Michael Kerrisk .\" 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 \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 \fP/* Definicja stałych \fBAT_*\fP */ \fB#include \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 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 #include #include #include #include #include \& int main(int argc, char *argv[]) { struct stat sb; \& if (argc != 2) { fprintf(stderr, "Usage: %s \[rs]n", argv[0]); exit(EXIT_FAILURE); } \& if (lstat(argv[1], &sb) == \-1) { perror("lstat"); exit(EXIT_FAILURE); } \& printf("ID of containing device: [%x,%x]\[rs]n", major(sb.st_dev), minor(sb.st_dev)); \& printf("File type: "); \& switch (sb.st_mode & S_IFMT) { case S_IFBLK: printf("block device\[rs]n"); break; case S_IFCHR: printf("character device\[rs]n"); break; case S_IFDIR: printf("directory\[rs]n"); break; case S_IFIFO: printf("FIFO/pipe\[rs]n"); break; case S_IFLNK: printf("symlink\[rs]n"); break; case S_IFREG: printf("regular file\[rs]n"); break; case S_IFSOCK: printf("socket\[rs]n"); break; default: printf("unknown?\[rs]n"); break; } \& printf("I\-node number: %ju\[rs]n", (uintmax_t) sb.st_ino); \& printf("Mode: %jo (octal)\[rs]n", (uintmax_t) sb.st_mode); \& printf("Link count: %ju\[rs]n", (uintmax_t) sb.st_nlink); printf("Ownership: UID=%ju GID=%ju\[rs]n", (uintmax_t) sb.st_uid, (uintmax_t) sb.st_gid); \& printf("Preferred I/O block size: %jd bytes\[rs]n", (intmax_t) sb.st_blksize); printf("File size: %jd bytes\[rs]n", (intmax_t) sb.st_size); printf("Blocks allocated: %jd\[rs]n", (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 , Robert Luberda i Michał Kułach . .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 .