dwww Home | Manual pages | Find package

stat(2)                       System Calls Manual                      stat(2)

NOM
       stat, fstat, lstat, fstatat - Obtenir l'état d'un fichier (file status)

BIBLIOTHÈQUE
       Bibliothèque C standard (libc, -lc)

SYNOPSIS
       #include <sys/stat.h>

       int stat(const char *restrict chemin,
                struct stat *restrict statbuf);
       int fstat(int fd, struct stat *statbuf);
       int lstat(const char *restrict chemin,
                struct stat *restrict statbuf);

       #include <fcntl.h>           /* Définition des constantes AT_* */
       #include <sys/stat.h>

       int fstatat(int dirfd, const char *restrict chemin,
                struct stat *restrict statbuf, int attributs);

   Exigences  de  macros  de  test de fonctionnalités pour la glibc (consulter
   feature_test_macros(7)) :

       lstat() :
           /* 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

       fstatat() :
           Depuis la version 2.10 de la glibc :
               _POSIX_C_SOURCE >= 200809L
           Avant la version 2.10 de la glibc :
               _ATFILE_SOURCE

DESCRIPTION
       Ces fonctions renvoient des renseignements sur le fichier indiqué, dans
       le  tampon pointé par statbuf. Vous n'avez besoin d'aucun droit d'accès
       au fichier pour obtenir les informations, mais vous devez — dans le cas
       de  stat(),  fstatat()  et lstat() — avoir le droit d'exécuter (search)
       sur tous les répertoires mentionnés dans le chemin menant au fichier.

       stat() et fstatat() récupèrent des renseignements sur le fichier pointé
       par chemin. Les différences de fstatat() sont décrites ci-dessous :

       lstat()  est  identique à stat(), sauf que dans le cas où chemin est un
       lien symbolique, auquel cas il renvoie des renseignements sur  le  lien
       lui-même plutôt que celui du fichier visé.

       fstat() est identique à stat(), sauf que le fichier dont les renseigne-
       ments sont à récupérer est référencé par le descripteur de fichier fd.

   La structure stat
       Les  trois  fonctions   renvoient   une   structure   stat   (consultez
       stat(3type)).

       Note :  pour  des  raisons  de performance et de simplicité, différents
       champs dans la structure stat peuvent contenir des informations  d'état
       à  différents  moments  durant  l'exécution  de  l'appel  système.  Par
       exemple, si st_mode ou st_uid sont modifiés par un autre  processus  en
       appelant chmod(2) ou chown(2), stat() peut renvoyer l'ancien st_mode en
       même temps que le nouveau st_uid ou l'ancien st_uid en même  temps  que
       le nouveau st_mode.

   fstatat()
       L'appel  système fstatat() est une interface plus générale pour accéder
       à des informations de fichier qui peut  encore  fournir  exactement  le
       comportement de chaque appel à stat(), lstat() et fstat().

       Si  le  chemin  donnée dans chemin est un chemin relatif, il est inter-
       prété par rapport au répertoire référencé par le descripteur de fichier
       dirfd, (plutôt que par rapport au répertoire courant du processus appe-
       lant, comme avec stat() et lstat() pour un chemin relatif).

       Si chemin est relatif, et si dirfd est  la  valeur  spéciale  AT_FDCWD,
       chemin est interprété comme étant relatif au répertoire courant du pro-
       cessus appelant, comme stat() et lstat().

       Si pathname est absolu, alors dirfd est ignoré.

       L'argument attributs est soit 0, soit un OU binaire « | » avec les  op-
       tions suivantes :

       AT_EMPTY_PATH (depuis Linux 2.6.39)
              Si  chemin  est une chaîne vide, opérer sur le fichier référencé
              par dirfd (qui peut avoir été obtenu en utilisant  open(2)  avec
              l’attribut O_PATH). Dans ce cas, dirfd peut référencer tout type
              de fichier, pas uniquement un répertoire et le  comportement  de
              fstatat()  est  similaire  à  celui  de  fstat().  Si  dirfd est
              AT_FDCWD, l’appel opère sur le répertoire de travail actuel. Cet
              attribut  est  spécifique à Linux, _GNU_SOURCE doit être définie
              pour obtenir sa définition.

       AT_NO_AUTOMOUNT (depuis Linux 2.6.38)
              Ne pas monter automatiquement la partie terminal  (« basename »)
              de chemin. Depuis Linux 3.1, cet attribut est ignoré. Depuis Li-
              nux 4.11, cet attribut est implicite.

       AT_SYMLINK_NOFOLLOW
              Si chemin est un lien symbolique, ne pas le  déréférencer,  mais
              renvoyer  des  informations  sur le lien lui-même, comme le fait
              lstat(2). (Par défaut, fstatat() déréférence  les  liens  symbo-
              liques, comme stat(2).)

       Consultez openat(2) pour une explication de la nécessité de fstatat().

VALEUR RENVOYÉE
       En  cas de succès, zéro est renvoyé. En cas d'erreur, -1 est renvoyé et
       errno est définie pour préciser l'erreur.

ERREURS
       EACCES La permission de parcours est refusée pour  un  des  répertoires
              contenu  dans  le  chemin  chemin. (Consultez aussi path_resolu-
              tion(7).)

       EBADF  Le descripteur de fichier fd est non valable.

       EBADF  (fstatat()) chemin est relatif mais dirfd n'est ni  AT_FDCWD  ni
              un descripteur de fichier valable.

       EFAULT Un pointeur se trouve en dehors de l'espace d'adressage.

       EINVAL (fstatat()) attributs contient un attribut non valable.

       ELOOP  Trop de liens symboliques rencontrés dans le chemin d'accès.

       ENAMETOOLONG
              nom_chemin est trop long.

       ENOENT Un  composant  du  chemin  d'accès chemin n'existe pas ou est un
              lien symbolique pointant nulle part.

       ENOENT chemin est une chaîne vide et AT_EMPTY_PATH n'a pas été spécifié
              dans attributs.

       ENOMEM Pas assez de mémoire (c'est-à-dire, mémoire du noyau).

       ENOTDIR
              Un élément du préfixe de chemin n'est pas un répertoire.

       ENOTDIR
              (fstatat())  chemin  est  relatif et dirfd est un descripteur de
              fichier faisant référence à un fichier qui n'est pas un dossier.

       EOVERFLOW
              chemin ou fd 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 off_t, ino_t ou blkcnt_t.  Cela  peut  arriver  par
              exemple   quand   une   application   compilée   sans   l'option
              -D_FILE_OFFSET_BITS=64  sur  une  plate-forme  32 bits   appelle
              stat() pour un fichier dont la taille est supérieure à (1<<31)-1
              octets.

VERSIONS
       fstatat() a été ajouté dans Linux 2.6.16 ; la prise en charge de la bi-
       bliothèque a été ajoutée dans la glibc 2.4.

STANDARDS
       stat(), fstat(), lstat() : SVr4, 4.3BSD, POSIX.1-2001, POSIX.1.2008.

       fstatat() : POSIX.1-2008.

       D'après  POSIX.1-2001,  lstat() sur un lien symbolique ne doit renvoyer
       des informations valables que dans le champ st_size et le type  de  fi-
       chier  du  champ st_mode de la structure stat. POSIX.1-2008 renforce la
       spécification, obligeant lstat() à renvoyer des  informations  valables
       dans tous les champs à part les bits de mode dans st_mode.

       L'utilisation  des  champs  st_blocks et st_blksize 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).

NOTES
   différences entre bibliothèque C et noyau
       Avec le temps, l'augmentation de la  taille  de  la  structure  stat  a
       conduit  à  trois  versions  successives  de  stat() : sys_stat() (slot
       __NR_oldstat),   sys_newstat()   (slot   __NR_stat)   et   sys_stat64()
       __NR_stat64) sur les plateformes 32 bits telles que i386. Les deux pre-
       miè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 re-
       marque s'applique à fstat() et lstat().

       Les versions internes du noyau de la structure stat  traitées  par  les
       différentes versions étaient respectivement :

       __old_kernel_stat
              La  structure d'origine avec des champs plutôt étroits et pas de
              remplissage.

       stat   Un champ plus grand st_ino et le  remplissage  ont  été  ajoutés
              dans  différentes  parties  de  la  structure  pour autoriser un
              agrandissement futur.

       stat64 Un champ st_ino encore plus grand, des champs st_uid  et  st_gid
              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.)

       La fonction d'enveloppe stat() 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éces-
       saire pour les binaires anciens.

       Dans  les  systèmes modernes 64 bits, la vie est plus simple : il n'y a
       qu'un seul appel système stat() et le noyau s'occupe  de  la  structure
       stat qui contient des champs d'une taille suffisante.

       L'appel  système  sous-jacent employé par la fonction d'enveloppe fsta-
       tat() de la glibc s'appelle en fait fstatat64() ou, sur  certaines  ar-
       chitectures, newfstatat().

EXEMPLES
       Le  programme suivant appelle lstat() et affiche certains champs sélec-
       tionnés dans la structure stat renvoyée.

       #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>\n", 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]\n",
                  major(sb.st_dev),
                  minor(sb.st_dev));

           printf("Type de fichier :                  ");

           switch (sb.st_mode & S_IFMT) {
           case S_IFBLK:  printf("périphérique bloc\n");       break;
           case S_IFCHR:  printf("périphérique caractère\n");  break;
           case S_IFDIR:  printf("répertoire\n");              break;
           case S_IFIFO:  printf("FIFO/tube\n");               break;
           case S_IFLNK:  printf("lien symbolique\n");         break;
           case S_IFREG:  printf("fichier ordinaire\n");       break;
           case S_IFSOCK: printf("socket\n");                  break;
           default:       printf("inconnu ?\n");               break;
           }

           printf("Numéro d'inœud :            %ju\n", (uintmax_t) sb.st_ino);

           printf("Mode :                     %jo (octal)\n",
                  (uintmax_t) sb.st_mode);

           printf("Nombre de liens :       %ju\n", (uintmax_t) sb.st_nlink);
           printf("Propriétaires :                UID=%ju   GID=%ju\n",
                  (uintmax_t) sb.st_uid, (uintmax_t) sb.st_gid);

           printf("Taille de bloc d'E/S :  %jd octets\n",
                  (intmax_t) sb.st_blksize);
           printf("Taille du fichier :     %jd octets\n",
                  (intmax_t) sb.st_size);
           printf("Blocs alloués :         %jd\n",
                  (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);
       }

VOIR AUSSI
       ls(1), stat(1), access(2), chmod(2), chown(2),  readlink(2),  statx(2),
       utime(2), stat(3type), capabilities(7), inode(7), symlink(7)

TRADUCTION
       La  traduction française de cette page de manuel a été créée par Chris-
       tophe Blaess <https://www.blaess.fr/christophe/>, Stéphan  Rafin  <ste-
       phan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, Fran-
       çois Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe  Gué-
       rard  <fevrier@tigreraye.org>,  Jean-Luc  Coulon (f5ibh) <jean-luc.cou-
       lon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>,  Thomas  Huriaux
       <thomas.huriaux@gmail.com>,  Nicolas François <nicolas.francois@centra-
       liens.net>, Florentin Duneau <fduneau@gmail.com>, Simon  Paillard  <si-
       mon.paillard@resel.enst-bretagne.fr>,    Denis   Barbier   <barbier@de-
       bian.org>,  David  Prévot  <david@tilapin.org>  et  Jean-Pierre  Giraud
       <jean-pierregiraud@neuf.fr>

       Cette traduction est une documentation libre ; veuillez vous reporter à
       la       GNU       General       Public        License        version 3
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  concernant  les conditions
       de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

       Si vous découvrez un bogue dans la traduction de cette page de  manuel,
       veuillez envoyer un message à ⟨debian-l10n-french@lists.debian.org⟩.

Pages du manuel de Linux 6.03   5 février 2023                         stat(2)

Generated by dwww version 1.15 on Sat Jun 29 01:37:49 CEST 2024.