Provided by: manpages-fr-dev_4.19.0-7_all bug

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 glibc 2.10 :
               _POSIX_C_SOURCE >= 200809L
           Avant la glibc 2.10 :
               _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 renseignements 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 interpré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 appelant, 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 processus 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 options 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 Linux 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 symboliques, 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_resolution(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 bibliothè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 fichier 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 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 à 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écessaire 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  fstatat()  de  la  glibc
       s'appelle en fait fstatat64() ou, sur certaines architectures, newfstatat().

EXEMPLES

       Le  programme  suivant  appelle  lstat()  et  affiche certains champs sélectionné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 Christophe Blaess
       <https://www.blaess.fr/christophe/>, Stéphan  Rafin  <stephan.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.coulon@wanadoo.fr>,    Julien    Cristau    <jcristau@debian.org>,    Thomas   Huriaux
       <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin
       Duneau  <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis
       Barbier <barbier@debian.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⟩.