.\" -*- 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 "3 mai 2023" "Pages du manuel de Linux 6.05.01" .SH NOM stat, fstat, lstat, fstatat \- Obtenir l'état d'un fichier (file status) .SH BIBLIOTHÈQUE Bibliothèque C standard (\fIlibc\fP, \fI\-lc\fP) .SH SYNOPSIS .nf \fB#include \fP .PP \fBint stat(const char *restrict \fP\fIchemin\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\fIchemin\fP\fB,\fP \fB struct stat *restrict \fP\fIstatbuf\fP\fB);\fP .PP \fB#include \fP/* Définition des constantes \fBAT_*\fP */ \fB#include \fP .PP \fBint fstatat(int \fP\fIdirfd\fP\fB, const char *restrict \fP\fIchemin\fP\fB,\fP \fB struct stat *restrict \fP\fIstatbuf\fP\fB, int \fP\fIattributs\fP\fB);\fP .fi .PP .RS -4 Exigences de macros de test de fonctionnalités pour la glibc (consulter \fBfeature_test_macros\fP(7))\ : .RE .PP \fBlstat\fP()\ : .nf .\" _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED /* Depuis la glibc 2.20 */ _DEFAULT_SOURCE || _XOPEN_SOURCE >= 500 || /* Depuis la glibc 2.10 : */ _POSIX_C_SOURCE >= 200112L || /* Pour la glibc antérieure et égale à 2.19 */ _BSD_SOURCE .fi .PP \fBfstatat\fP()\ : .nf Depuis la glibc 2.10 : _POSIX_C_SOURCE >= 200809L avant la glibc 2.10 : _ATFILE_SOURCE .fi .SH DESCRIPTION Ces fonctions renvoient des renseignements sur le fichier indiqué, dans le tampon pointé par \fIstatbuf\fP. Vous n'avez besoin d'aucun droit d'accès au fichier pour obtenir les informations, mais vous devez \[em]\ dans le cas de \fBstat\fP(), \fBfstatat\fP() et \fBlstat\fP()\ \[em] avoir le droit d'exécuter (search) sur tous les répertoires mentionnés dans le \fIchemin\fP menant au fichier. .PP \fBstat\fP() et \fBfstatat\fP() récupèrent des renseignements sur le fichier pointé par \fIchemin\fP. Les différences de \fBfstatat\fP() sont décrites ci\-dessous\ : .PP \fBlstat\fP() est identique à \fBstat\fP(), sauf que dans le cas où \fIchemin\fP est un lien symbolique, auquel cas il renvoie des renseignements sur le lien lui\-même plutôt que celui du fichier visé. .PP .\" \fBfstat\fP() est identique à \fBstat\fP(), sauf que le fichier dont les renseignements sont à récupérer est référencé par le descripteur de fichier \fIfd\fP. .SS "La structure stat" Les trois fonctions renvoient une structure \fIstat\fP (consultez \fBstat\fP(3type)). .PP .\" Background: inode attributes are modified with i_mutex held, but .\" read by stat() without taking the mutex. \fINote\fP\ : pour des raisons de performance et de simplicité, différents champs dans la structure \fIstat\fP peuvent contenir des informations d'état à différents moments durant l'exécution de l'appel système. Par exemple, si \fIst_mode\fP ou \fIst_uid\fP sont modifiés par un autre processus en appelant \fBchmod\fP(2) ou \fBchown\fP(2), \fBstat\fP() peut renvoyer l'ancien \fIst_mode\fP en même temps que le nouveau \fIst_uid\fP ou l'ancien \fIst_uid\fP en même temps que le nouveau \fIst_mode\fP. .SS fstatat() L'appel système \fBfstatat\fP() est une interface plus générale pour accéder à des informations de fichier qui peut encore fournir exactement le comportement de chaque appel à \fBstat\fP(), \fBlstat\fP() et \fBfstat\fP(). .PP Si le chemin donnée dans \fIchemin\fP est un chemin relatif, il est interprété par rapport au répertoire référencé par le descripteur de fichier \fIdirfd\fP, (plutôt que par rapport au répertoire courant du processus appelant, comme avec \fBstat\fP() et \fBlstat\fP() pour un chemin relatif). .PP Si \fIchemin\fP est relatif, et si \fIdirfd\fP est la valeur spéciale \fBAT_FDCWD\fP, \fIchemin\fP est interprété comme étant relatif au répertoire courant du processus appelant, comme \fBstat\fP() et \fBlstat\fP(). .PP Si \fIpathname\fP est absolu, alors \fIdirfd\fP est ignoré. .PP L'argument \fIattributs\fP est soit 0, soit un \fIOU\fP binaire «\ |\ » avec les options suivantes\ : .TP \fBAT_EMPTY_PATH\fP (depuis Linux 2.6.39) .\" commit 65cfc6722361570bfe255698d9cd4dccaf47570d .\" Before glibc 2.16, defining _ATFILE_SOURCE sufficed Si \fIchemin\fP est une chaîne vide, opérer sur le fichier référencé par \fIdirfd\fP (qui peut avoir été obtenu en utilisant \fBopen\fP(2) avec l’attribut \fBO_PATH\fP). Dans ce cas, \fIdirfd\fP peut référencer tout type de fichier, pas uniquement un répertoire et le comportement de \fBfstatat\fP() est similaire à celui de \fBfstat\fP(). Si \fIdirfd\fP est \fBAT_FDCWD\fP, l’appel opère sur le répertoire de travail actuel. Cet attribut est spécifique à Linux, \fB_GNU_SOURCE\fP doit être définie pour obtenir sa définition. .TP \fBAT_NO_AUTOMOUNT\fP (depuis Linux\ 2.6.38) Ne pas monter automatiquement la partie terminal («\ basename\ ») de \fIchemin\fP. Depuis Linux\ 3.1, cet attribut est ignoré. Depuis Linux\ 4.11, cet attribut est implicite. .TP \fBAT_SYMLINK_NOFOLLOW\fP Si \fIchemin\fP est un lien symbolique, ne pas le déréférencer, mais renvoyer des informations sur le lien lui\(hymême, comme le fait \fBlstat\fP(2). (Par défaut, \fBfstatat\fP() déréférence les liens symboliques, comme \fBstat\fP(2).) .PP Consultez \fBopenat\fP(2) pour une explication de la nécessité de \fBfstatat\fP(). .SH "VALEUR RENVOYÉE" En cas de succès, zéro est renvoyé. En cas d'erreur, \fB\-1\fP est renvoyé et \fIerrno\fP est définie pour préciser l'erreur. .SH ERREURS .TP \fBEACCES\fP La permission de parcours est refusée pour un des répertoires contenu dans le chemin \fInom_chemin\fP. (Consultez aussi \fBpath_resolution\fP(7).) .TP \fBEBADF\fP Le descripteur de fichier \fIfd\fP est non valable. .TP \fBEBADF\fP (\fBfstatat\fP()) \fIchemin\fP est relatif mais \fIdirfd\fP n'est ni \fBAT_FDCWD\fP ni un descripteur de fichier valable. .TP \fBEFAULT\fP Un pointeur se trouve en dehors de l'espace d'adressage. .TP \fBEINVAL\fP (\fBfstatat\fP()) \fIattributs\fP contient un attribut non valable. .TP \fBELOOP\fP Trop de liens symboliques rencontrés dans le chemin d'accès. .TP \fBENAMETOOLONG\fP \fInom_chemin\fP est trop long. .TP \fBENOENT\fP Un composant du chemin d'accès \fIchemin\fP n'existe pas ou est un lien symbolique pointant nulle part. .TP \fBENOENT\fP \fIchemin\fP est une chaîne vide et \fBAT_EMPTY_PATH\fP n'a pas été spécifié dans \fIattributs\fP. .TP \fBENOMEM\fP Pas assez de mémoire (mémoire noyau). .TP \fBENOTDIR\fP Un élément du préfixe de \fIchemin\fP n'est pas un répertoire. .TP \fBENOTDIR\fP (\fBfstatat\fP()) \fIchemin\fP est relatif et \fIdirfd\fP est un descripteur de fichier faisant référence à un fichier qui n'est pas un dossier. .TP \fBEOVERFLOW\fP \fIchemin\fP ou \fIfd\fP font référence à un fichier dont la taille, l'inœud ou le nombre de blocs ne peut pas être représenté respectivement avec le type \fIoff_t\fP, \fIino_t\fP ou \fIblkcnt_t\fP. Cela peut arriver par exemple quand une application compilée sans l'option \fI\-D_FILE_OFFSET_BITS=64\fP sur une plate\-forme 32\ bits appelle \fBstat\fP() pour un fichier dont la taille est supérieure à \fI(1<<31)\-1\fP octets. .SH STANDARDS POSIX.1\-2008. .SH HISTORIQUE .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 D'après POSIX.1\-2001, \fBlstat\fP() sur un lien symbolique ne doit renvoyer des informations valables que dans le champ \fIst_size\fP et le type de fichier du champ \fIst_mode\fP de la structure \fIstat\fP. POSIX.1\-2008 renforce la spécification, obligeant \fBlstat\fP() à renvoyer des informations valables dans tous les champs à part les bits de mode dans \fIst_mode\fP. .PP L'utilisation des champs \fIst_blocks\fP et \fIst_blksize\fP risque d'être moins portable (ils ont été introduits dans BSD. Leur interprétation change suivant les systèmes, voire sur un même système s'il y a des montages NFS). .SS "Différences entre bibliothèque C et noyau" .\" See include/asm-i386/stat.h in the Linux 2.4 source code for the .\" various versions of the structure definitions Avec le temps, l'augmentation de la taille de la structure \fIstat\fP a conduit à trois versions successives de \fBstat\fP()\ : \fIsys_stat\fP() (slot \fI__NR_oldstat\fP), \fIsys_newstat\fP() (slot \fI__NR_stat\fP) et \fIsys_stat64\fP() \fI__NR_stat64\fP) sur les plateformes 32\ bits telles que i386. Les deux premières versions étaient déjà présentes dans Linux\ 1.0 (quoiqu'avec des noms différents), la dernière a été ajoutée dans Linux\ 2.4. La même remarque s'applique à \fBfstat\fP() et \fBlstat\fP(). .PP Les versions internes du noyau de la structure \fIstat\fP traitées par les différentes versions étaient respectivement\ : .TP \fI__old_kernel_stat\fP La structure d'origine avec des champs plutôt étroits et pas de remplissage. .TP \fIstat\fP Un champ plus grand \fIst_ino\fP et le remplissage ont été ajoutés dans différentes parties de la structure pour autoriser un agrandissement futur. .TP \fIstat64\fP Un champ \fIst_ino\fP encore plus grand, des champs \fIst_uid\fP et \fIst_gid\fP plus grands pour s'adapter à l'extension à 32\ bits des UID et GID dans Linux\ 2.4 et d'autres champs agrandis ainsi que plus de remplissage dans la structure. (Divers octets de remplissage étaient finalement consommés dans Linux\ 2.6 avec l'introduction d'ID de périphérique 32\ bits et des composants en nanosecondes dans les champs d'horodatage.) .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 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.) La fonction d'enveloppe \fBstat\fP() de la glibc dissimule ces détails aux applications invoquant la version la plus récente de l'appel système fourni par le noyau, et recompresse l'information renvoyée si nécessaire pour les binaires anciens. .PP Dans les systèmes modernes 64\ bits, la vie est plus simple\ : il n'y a qu'un seul appel système \fBstat\fP() et le noyau s'occupe de la structure \fIstat\fP qui contient des champs d'une taille suffisante. .PP .\" strace(1) shows the name "newfstatat" on x86-64 L'appel système sous\-jacent employé par la fonction d'enveloppe \fBfstatat()\fP de la glibc s'appelle en fait \fBfstatat64\fP() ou, sur certaines architectures, \fBnewfstatat\fP(). .SH EXEMPLES Le programme suivant appelle \fBlstat\fP() et affiche certains champs sélectionnés dans la structure \fIstat\fP renvoyée. .PP .\" 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, "Utilisation : %s \en", argv[0]); exit(EXIT_FAILURE); } \& if (lstat(argv[1], &sb) == \-1) { perror("lstat"); exit(EXIT_FAILURE); } \& printf("ID du périphérique contenant : [%x,%x]\en", major(sb.st_dev), minor(sb.st_dev)); \& printf("Type de fichier : "); \& switch (sb.st_mode & S_IFMT) { case S_IFBLK: printf("block device\en"); break; case S_IFCHR: printf("périphérique caractère\en"); break; case S_IFDIR: printf("répertoire\en"); break; case S_IFIFO: printf("FIFO/tube\en"); break; case S_IFLNK: printf("lien symbolique\en"); break; case S_IFREG: printf("fichier ordinaire\en"); break; case S_IFSOCK: printf("socket\en"); break; default: printf("inconnu\ ?\en"); break; } \& printf("Numéro d'inœud\ : %ju\en", (uintmax_t) sb.st_ino); \& printf("Mode: %jo (octal)\en", (uintmax_t) sb.st_mode); \& printf("Nombre de liens\ : %ju\en", (uintmax_t) sb.st_nlink); printf("Propriétaires\ : UID=%ju GID=%ju\en", (uintmax_t) sb.st_uid, (uintmax_t) sb.st_gid); \& printf("Taille de bloc d'E/S\ : %jd bytes\en", (intmax_t) sb.st_blksize); printf("Taille du fichier\ %jd bytes\en", (intmax_t) sb.st_size); printf("Blocs alloués\ : %jd\en", (intmax_t) sb.st_blocks); \& printf("Dernier changement d'état\ : %s", ctime(&sb.st_ctime)); printf("Dernier accès au fichier\ : %s", ctime(&sb.st_atime)); printf("Dernière modification du fichier\ : %s", ctime(&sb.st_mtime)); \& exit(EXIT_SUCCESS); } .EE .\" SRC END .SH "VOIR AUSSI" \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 TRADUCTION La traduction française de cette page de manuel a été créée par Christophe Blaess , Stéphan Rafin , Thierry Vignaud , François Micaux, Alain Portal , Jean-Philippe Guérard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas François , Florentin Duneau , Simon Paillard , Denis Barbier , David Prévot et Jean-Pierre Giraud . .PP Cette traduction est une documentation libre ; veuillez vous reporter à la .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License version 3 .UE concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE. .PP Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à .MT debian-l10n-french@lists.debian.org .ME .