Provided by: manpages-fr-dev_3.32d0.2p4-1_all bug

NOM

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

SYNOPSIS

       #include <sys/types.h>
       #include <sys/stat.h>
       #include <unistd.h>

       int stat(const char *path, struct stat *buf);
       int fstat(int fd, struct stat *buf);
       int lstat(const char *path, struct stat *buf);

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

       lstat() :
           _BSD_SOURCE || _XOPEN_SOURCE >= 500 ||
           _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
           || /* Depuis la glibc 2.10 : */ _POSIX_C_SOURCE >= 200112L

DESCRIPTION

       Ces  fonctions  renvoient des informations à propos du fichier indiqué.
       Vous n'avez besoin d'aucun droit d'accès au fichier  pour  obtenir  les
       informations,  mais  vous  devez  —  dans le cas de stat() et lstat() —
       avoir le droit de parcours de tous les répertoires mentionnés  dans  le
       chemin menant au fichier.

       stat()  récupère l'état du fichier pointé par path et remplit le tampon
       buf.

       lstat() est identique à stat(), sauf que dans le cas  où  path  est  un
       lien  symbolique,  il donne l'état du lien lui-même plutôt que celui du
       fichier visé.

       fstat() est identique à stat(), sauf que le  fichier  dont  l'état  est
       donné est celui référencé par le descripteur de fichier fd.

       Les  trois fonctions retournent une structure stat contenant les champs
       suivants :

           struct stat {
               dev_t     st_dev;      /* Périphérique                    */
               ino_t     st_ino;      /* Numéro inœud                    */
               mode_t    st_mode;     /* Protection                      */
               nlink_t   st_nlink;    /* Nb liens matériels              */
               uid_t     st_uid;      /* UID propriétaire                */
               gid_t     st_gid;      /* GID propriétaire                */
               dev_t     st_rdev;     /* Type périphérique               */
               off_t     st_size;     /* Taille totale en octets         */
               blksize_t st_blksize;  /* Taille de bloc pour E/S         */
               blkcnt_t  st_blocks;   /* Nombre de blocs de 512B alloués */
               time_t    st_atime;    /* Heure dernier accès             */
               time_t    st_mtime;    /* Heure dernière modification     */
               time_t    st_ctime;    /* Heure dernier changement état   */
           };

       Le champ st_dev décrit le périphérique sur lequel  ce  fichier  réside.
       Les  macros  major(3)  et  minor(3) peuvent être utiles pour décomposer
       l'identifiant de périphérique de ce champ.

       Le champ  st_rdev  indique  le  périphérique  que  ce  fichier  (inœud)
       représente.

       Le champ st_size indique la taille du fichier (s'il s'agit d'un fichier
       ordinaire ou d'un lien symbolique)  en  octets.  La  taille  d'un  lien
       symbolique  est la longueur de la chaîne représentant le chemin d'accès
       qu'il vise, sans le caractère NUL final.

       Le champ st_blocks indique le nombre de blocs de 512 octets alloués  au
       fichier.  Cette valeur peut être inférieure à st_size/512 si le fichier
       a des trous.

       Le champ st_blksize donne la  taille  de  bloc  « préférée »  pour  des
       entrées-sorties  efficaces. Des écritures par blocs plus petits peuvent
       entraîner un cycle lecture/modification/réécriture inefficace.

       Tous les systèmes de fichiers de  Linux  n'implémentent  pas  tous  les
       champs  liés  à  la  date.  Certains systèmes de fichiers autorisent le
       montage de telle manière que les accès à des fichiers et/ou répertoires
       ne   modifient  pas  le  champ  st_atime  (voir  les  options  noatime,
       nodiratime  et  relatime  de  mount(8)  ainsi  que   les   informations
       correspondante  dans  mount(2)). De plus, st_atime n'est pas mis à jour
       si un fichier est ouvert avec l'option O_NOATIME ; consultez open(2).

       Le champ st_atime est modifié par les accès  au  fichier,  par  exemple
       avec  execve(2),  mknod(2), pipe(2), utime(2) et read(2) (d'au moins un
       octet). D'autres routines, comme mmap(2), peuvent ou non mettre à  jour
       ce champ st_atime.

       Le  champ  st_mtime  est  modifié  par  des  changements sur le fichier
       lui-même, c'est-à-dire  mknod(2),  truncate(2),  utime(2)  et  write(2)
       (d'au  moins un octet). D'autre part, le champ st_mtime d'un répertoire
       est modifié lors de la création ou la suppression de  fichiers  en  son
       sein.  Le  champ  st_mtime n'est pas mis à jour lors de modification de
       propriétaire, groupe, mode ou nombre de liens physiques.

       Le champ st_ctime est modifié lors d'une écriture ou  une  modification
       de données concernant l'inœud (propriétaire, groupe, mode, etc.).

       Les  macros  POSIX  suivantes  sont  fournies  pour vérifier le type de
       fichier (dans le champ st_mode) :

           S_ISREG(m)  un fichier ordinaire ?

           S_ISDIR(m)  un répertoire ?

           S_ISCHR(m)  un périphérique caractère ?

           S_ISBLK(m)  un périphérique bloc ?

           S_ISFIFO(m) FIFO (tube nommé) ?

           S_ISLNK(m)  un lien symbolique ? (Pas dans POSIX.1-1996).

           S_ISSOCK(m) une socket ? (Pas dans POSIX.1-1996).

       Les attributs suivants correspondent au champ st_mode :

           S_IFMT     0170000   masque du type de fichier
           S_IFSOCK   0140000   socket
           S_IFLNK    0120000   lien symbolique
           S_IFREG    0100000   fichier ordinaire
           S_IFBLK    0060000   périphérique bloc
           S_IFDIR    0040000   répertoire
           S_IFCHR    0020000   périphérique caractère
           S_IFIFO    0010000   fifo
           S_ISUID    0004000   bit Set-UID

           S_ISGID    0002000   bit Set-Gid (voir ci‐dessous)
           S_ISVTX    0001000   bit « sticky » (voir ci‐dessous)
           S_IRWXU    00700     lecture/écriture/exécution du propriétaire
           S_IRUSR    00400     le propriétaire a le droit de lecture
           S_IWUSR    00200     le propriétaire a le droit d'écriture
           S_IXUSR    00100     le propriétaire a le droit d'exécution
           S_IRWXG    00070     lecture/écriture/exécution du groupe
           S_IRGRP    00040     le groupe a le droit de lecture
           S_IWGRP    00020     le groupe a le droit d'écriture
           S_IXGRP    00010     le groupe a le droit d'exécution
           S_IRWXO    00007     lecture/écriture/exécution des autres
           S_IROTH    00004     les autres ont le droit de lecture
           S_IWOTH    00002     les autres ont le droit d'écriture
           S_IXOTH    00001     les autres ont le droit d'exécution

       Le bit Set-GID (S_ISGID) a plusieurs utilisations particulières :  pour
       un  répertoire, il indique que la sémantique BSD doit être appliquée en
       son sein, c'est-à-dire que les fichiers qui y sont créés héritent  leur
       GID  du répertoire et non pas du GID effectif du processus créateur, et
       les sous-répertoires auront automatiquement le bit S_ISGID actif.  Pour
       les  fichiers  qui  n'ont pas d'autorisation d'exécution pour le groupe
       (S_IXGRP non actif), ce bit indique qu'un verrouillage  strict  est  en
       vigueur sur ce fichier.

       Le  bit « sticky » (S_ISVTX) sur un répertoire indique que les fichiers
       qui s'y trouvent ne peuvent être  renommés  ou  effacés  que  par  leur
       propriétaire,  par  le  propriétaire  du répertoire ou par un processus
       privilégié.

VALEUR RENVOYÉE

       S'il réussit, cet appel système renvoie 0. S'il échoue, il  renvoie  -1
       et remplit errno en conséquence.

ERREURS

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

       EBADF  fd est un mauvais descripteur.

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

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

       ENAMETOOLONG
              Nom de fichier trop long.

       ENOENT Un composant du chemin path n'existe pas, ou path est une chaîne
              vide.

       ENOMEM Pas assez de mémoire (mémoire noyau).

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

       EOVERFLOW
              (stat()) path se réfère à un fichier dont la taille ne peut  pas
              être représentée avec le type off_t. Ceci peut arriver 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 bits.

CONFORMITÉ

       Ces appels système sont conformes à SVr4, BSD 4.3, POSIX.1-2001.

       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). Si vous avez besoin de connaitre la définition des types blkcnt_t
       ou blksize_t de <sys/stat.h>, alors définissez _XOPEN_SOURCE  avec  une
       valeur supérieure ou égale à 500 (avant d'inclure tout en‐tête).

       POSIX  ne  décrit  pas  les  bits  S_IFMT,  S_IFSOCK, S_IFLNK, S_IFREG,
       S_IFBLK, S_IFDIR, S_IFCHR, S_IFIFO, S_ISVTX,  mais  réclame  d'utiliser
       les  macros  S_ISDIR(),  etc.  Les macros S_ISLNK() et S_ISSOCK() ne se
       trouvent pas dans POSIX.1-1996 mais sont présentes  dans  POSIX.1-2001.
       La première vient de SVID 4, la seconde de SUSv2.

       UNIX  V7 (et les systèmes suivants) propose S_IREAD, S_IWRITE, S_IEXEC,
       là où POSIX préfère leurs synonymes S_IRUSR, S_IWUSR, S_IXUSR.

   Autres systèmes
       Voici quelques valeurs qui ont été (ou  sont)  utilisées  sur  d'autres
       systèmes

       hex    nom        ls   octal    description
       f000   S_IFMT          170000   Masque du type de fichier
       0000                   000000   inœud hors-service (SCO) ; type inconnu
                                       (BSD) ; SVID-v2 et XPG2 ont 0 et
                                       0100000 pour « fichier ordinaire »
       1000   S_IFIFO    p|   010000   fifo (tube nommé)
       2000   S_IFCHR    c    020000   fichier spécial caractère (V7)
       3000   S_IFMPC         030000   fichier spécial caractère multiplexé
                                       (V7)
       4000   S_IFDIR    d/   040000   répertoire (V7)
       5000   S_IFNAM         050000   fichier spécial nommé XENIX avec deux
                                       sous-types distingués par
                                       st_rdev valant 1 ou 2
       0001   S_INSEM    s    000001   sous-type sémaphore de IFNAM XENIX
       0002   S_INSHD    m    000002   sous-type données partagées de IFNAM
                                       XENIX
       6000   S_IFBLK    b    060000   fichier spécial bloc (V7)
       7000   S_IFMPB         070000   fichier spécial bloc multiplexé (V7)
       8000   S_IFREG    -    100000   fichier normal (V7)
       9000   S_IFCMP         110000   compressé VxFS
       9000   S_IFNWK    n    110000   fichier spécial réseau (HP-UX)
       a000   S_IFLNK    l@   120000   lien symbolique (BSD)
       b000   S_IFSHAD        130000   Fichier shadow Solaris pour l'ACL
                                       (invisible depuis l'espace utilisateur)
       c000   S_IFSOCK   s=   140000   socket (BSD; aussi "S_IFSOC" sur VxFS)
       d000   S_IFDOOR   D>   150000   Solaris door
       e000   S_IFWHT    w%   160000   BSD whiteout (non utilisé pour les
                                       inœuds)
       0200   S_ISVTX         001000   « sticky bit »: garder en mémoire
                                       après exécution (V7)
                                       réservé (SVID-v2)
                                       non-répertoires : ne pas swapper le
                                       fichier (SunOS)
                                       répertoires : attribut de restrictions
                                       d'effacement (SVID-v4.2)
       0400   S_ISGID         002000   Fixer le GID à l'exécution (V7)
                                       pour les répertoires : sémantique BSD
                                       pour la propagation du GID
       0400   S_ENFMT         002000   Verrouillage strict System V
                                       (partagé avec S_ISGID)
       0800   S_ISUID         004000   Fixer l'UID à l'exécution (V7)
       0800   S_CDF           004000   Le répertoire est un fichier
                                       dépendant du contexte (HP-UX)

       Une commande sticky est apparue dans la version 32V d'AT&T UNIX.

NOTES

       Depuis  le noyau 2.5.48, la structure stat propose une résolution d'une
       nanoseconde pour les trois champs d'heure. La glibc montre le composant
       en  nanosecondes  de  chaque  champ  en  utilisant des noms de la forme
       st_atim.tv_nsec si _BSD_SOURCE ou _SVID_SOURCE est définie. Ces  champs
       sont  définis  dans  POSIX.1-2008  et,  à partir de la version 2.12, la
       glibc expose aussi ces noms de champs si  _POSIX_C_SOURCE  est  définie
       avec  une  valeur supérieure ou égale à 200809L ou si _XOPEN_SOURCE est
       définie avec une valeur supérieure ou égale à 700.  Si  aucune  de  ces
       macros  ne  sont  définies,  alors  les  valeurs  en  nanosecondes sont
       exposées avec des noms de la forme st_atimensec. Sur  les  systèmes  de
       fichiers  qui  ne  gèrent pas les résolutions inférieures à la seconde,
       ces champs prennent la valeur 0.

       Sous  Linux,  lstat()  ne  provoque  généralement   pas   d'action   de
       l'« automonteur », tandis que stat() le fera.

       Pour  la  plupart  des  fichiers  sous  /proc, stat() ne renvoie pas la
       taille du fichier dans le champ st_size. La valeur 0 est placée dans ce
       champ.

   Interface noyau sous-jacente
       Avec  le  temps,  l'augmentation  de  la  taille de la structure stat a
       conduit  à  3  versions  successives  de  stat() :  sys_stat()  (entrée
       __NR_oldstat),   sys_newstat()   (entrée   __NR_stat)  et  sys_stat64()
       (nouveauté du noyau  2.4 ;  entrée  __NR_stat64).  La  fonction  stat()
       fournie par la glibc cache ces détails aux applications, en appelant la
       version la plus récente de l'appel système fournie par le noyau  et  en
       réorganisant  si nécessaire les informations renvoyées pour les anciens
       binaires. La même remarque s'applique à fstat() et lstat().

EXEMPLE

       Le  programme  suivant  appelle  stat()  et  affiche  certains   champs
       sélectionnés dans la structure stat renvoyée.

       #include <sys/types.h>
       #include <sys/stat.h>
       #include <time.h>
       #include <stdio.h>
       #include <stdlib.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 (stat(argv[1], &sb) == -1) {
               perror("stat");
               exit(EXIT_FAILURE);
           }

           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 :                   %ld\n", (long) sb.st_ino);

           printf("Mode :                             %lo (octal)\n",
                   (unsigned long) sb.st_mode);

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

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

       access(2),   chmod(2),  chown(2),  fstatat(2),  readlink(2),  utime(2),
       capabilities(7), symlink(7)

COLOPHON

       Cette page fait partie de  la  publication  3.32  du  projet  man-pages
       Linux.  Une description du projet et des instructions pour signaler des
       anomalies      peuvent      être       trouvées       à       l'adresse
       <URL:http://www.kernel.org/doc/man-pages/>.

TRADUCTION

       Depuis  2010,  cette  traduction est maintenue à l'aide de l'outil po4a
       <URL:http://po4a.alioth.debian.org/>   par   l'équipe   de   traduction
       francophone        au        sein        du       projet       perkamon
       <URL:http://perkamon.alioth.debian.org/>.

       Christophe Blaess  <URL:http://www.blaess.fr/christophe/>  (1996-2003),
       Alain   Portal   <URL:http://manpagesfr.free.fr/>  (2003-2006).  Julien
       Cristau et l'équipe francophone de traduction de Debian (2006-2009).

       Veuillez  signaler  toute  erreur   de   traduction   en   écrivant   à
       <debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
       paquet manpages-fr.

       Vous pouvez toujours avoir accès à la version anglaise de  ce  document
       en utilisant la commande « man -L C <section> <page_de_man> ».