Provided by: manpages-fr-dev_3.27fr1.4-1_all bug

NOM

       stat, fstat, lstat - Obtenir l'etat 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 fonctionnalites pour la glibc (consultez
   feature_test_macros(7)) :

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

DESCRIPTION

       Ces fonctions renvoient des informations a propos du  fichier  indique.
       Vous  n'avez  besoin  d'aucun droit d'acces au fichier pour obtenir les
       informations, mais vous devez -- dans le cas de stat()  et  lstat()  --
       avoir  le  droit de parcours de tous les repertoires mentionnes dans le
       chemin menant au fichier.

       stat() recupere l'etat du fichier pointe par path et remplit le  tampon
       buf.

       lstat()  est  identique  a  stat(), sauf que dans le cas ou path est un
       lien symbolique, il donne l'etat du lien lui-meme plutot que  celui  du
       fichier vise.

       fstat()  est  identique  a  stat(), sauf que le fichier dont l'etat est
       donne est celui reference par le descripteur de fichier fd.

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

           struct stat {
               dev_t     st_dev;      /* Peripherique                    */
               ino_t     st_ino;      /* Numero inoeud                    */
               mode_t    st_mode;     /* Protection                      */
               nlink_t   st_nlink;    /* Nb liens materiels              */
               uid_t     st_uid;      /* UID proprietaire                */
               gid_t     st_gid;      /* GID proprietaire                */
               dev_t     st_rdev;     /* Type peripherique               */
               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 alloues */
               time_t    st_atime;    /* Heure dernier acces             */
               time_t    st_mtime;    /* Heure derniere modification     */
               time_t    st_ctime;    /* Heure dernier changement etat   */
           };

       Le  champ  st_dev  decrit le peripherique sur lequel ce fichier reside.
       Les macros major(3) et minor(3) peuvent  etre  utiles  pour  decomposer
       l'identifiant de peripherique de ce champ.

       Le  champ  st_rdev  indique  le  peripherique  que  ce fichier (inoeud)
       represente.

       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 chaine representant le chemin  d'acces
       qu'il vise, sans le caractere NUL final.

       Le  champ st_blocks indique le nombre de blocs de 512 octets alloues au
       fichier. Cette valeur peut etre inferieure a st_size/512 si le  fichier
       a des trous.

       Le  champ  st_blksize  donne  la taille de bloc << preferee >> pour des
       entrees-sorties efficaces. Des ecritures par blocs plus petits  peuvent
       entrainer un cycle lecture/modification/reecriture inefficace.

       Tous  les  systemes  de  fichiers  de Linux n'implementent pas tous les
       champs lies a la date. Certains  systemes  de  fichiers  autorisent  le
       montage de telle maniere que les acces a des fichiers et/ou repertoires
       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  a  jour
       si un fichier est ouvert avec l'option O_NOATIME ; consultez open(2).

       Le  champ  st_atime  est  modifie par les acces 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 a jour
       ce champ st_atime.

       Le champ st_mtime est  modifie  par  des  changements  sur  le  fichier
       lui-meme,  c'est-a-dire  mknod(2),  truncate(2),  utime(2)  et write(2)
       (d'au moins un octet). D'autre part, le champ st_mtime d'un  repertoire
       est  modifie  lors  de la creation ou la suppression de fichiers en son
       sein. Le champ st_mtime n'est pas mis a jour lors  de  modification  de
       proprietaire, groupe, mode ou nombre de liens physiques.

       Le  champ  st_ctime est modifie lors d'une ecriture ou une modification
       de donnees concernant l'inoeud (proprietaire, groupe, mode, etc.).

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

           S_ISREG(m)  un fichier ordinaire ?

           S_ISDIR(m)  un repertoire ?

           S_ISCHR(m)  un peripherique caractere ?

           S_ISBLK(m)  un peripherique bloc ?

           S_ISFIFO(m) FIFO (tube nomme) ?

           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   peripherique bloc
           S_IFDIR    0040000   repertoire

           S_IFCHR    0020000   peripherique caractere
           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/ecriture/execution du proprietaire
           S_IRUSR    00400     le proprietaire a le droit de lecture
           S_IWUSR    00200     le proprietaire a le droit d'ecriture
           S_IXUSR    00100     le proprietaire a le droit d'execution
           S_IRWXG    00070     lecture/ecriture/execution du groupe
           S_IRGRP    00040     le groupe a le droit de lecture
           S_IWGRP    00020     le groupe a le droit d'ecriture
           S_IXGRP    00010     le groupe a le droit d'execution
           S_IRWXO    00007     lecture/ecriture/execution des autres
           S_IROTH    00004     les autres ont le droit de lecture
           S_IWOTH    00002     les autres ont le droit d'ecriture
           S_IXOTH    00001     les autres ont le droit d'execution

       Le  bit Set-GID (S_ISGID) a plusieurs utilisations particulieres : pour
       un repertoire, il indique que la semantique BSD doit etre appliquee  en
       son  sein, c'est-a-dire que les fichiers qui y sont crees heritent leur
       GID du repertoire et non pas du GID effectif du processus createur,  et
       les  sous-repertoires auront automatiquement le bit S_ISGID actif. Pour
       les fichiers qui n'ont pas d'autorisation d'execution  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  repertoire  indique  que  les
       fichiers  qui  s'y trouvent ne peuvent etre renommes ou effaces que par
       leur  proprietaire,  par  le  proprietaire  du  repertoire  ou  par  un
       processus privilegie.

VALEUR RENVOY'EE

       S'il  reussit,  cet appel systeme renvoie 0. S'il echoue, il renvoie -1
       et remplit errno en consequence.

ERREURS

       EACCES La permission de parcours est refusee pour  un  des  repertoires
              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 rencontres dans le chemin d'acces.

       ENAMETOOLONG
              Nom de fichier trop long.

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

       ENOMEM Pas assez de memoire (memoire noyau).

       ENOTDIR
              Un element du prefixe du chemin path n'est pas un repertoire.

       EOVERFLOW
              (stat())  path se refere a un fichier dont la taille ne peut pas
              etre representee avec le type off_t. Ceci peut arriver quand une
              application  compilee  sans  l'option -D_FILE_OFFSET_BITS=64 sur
              une plate-forme 32 bits appelle stat() pour un fichier  dont  la
              taille est superieure a (2<<31)-1 bits.

CONFORMIT'E

       Ces appels systeme sont conformes a SVr4, BSD 4.3, POSIX.1-2001.

       L'utilisation  des  champs  st_blocks et st_blksize risque d'etre moins
       portable. (Ils ont ete introduits dans BSD. Leur interpretation  change
       suivant  les  systemes, voire sur un meme systeme s'il y a des montages
       NFS.)

       POSIX ne decrit  pas  les  bits  S_IFMT,  S_IFSOCK,  S_IFLNK,  S_IFREG,
       S_IFBLK,  S_IFDIR,  S_IFCHR,  S_IFIFO, S_ISVTX, mais reclame d'utiliser
       les macros S_ISDIR(), etc. Les macros S_ISLNK()  et  S_ISSOCK()  ne  se
       trouvent  pas  dans POSIX.1-1996 mais sont presentes dans POSIX.1-2001.
       La premiere vient de SVID 4, la seconde de SUSv2.

       Unix V7 (et les systemes suivants) propose S_IREAD, S_IWRITE,  S_IEXEC,
       la ou POSIX prefere leurs synonymes S_IRUSR, S_IWUSR, S_IXUSR.

   Autres syst`emes
       Voici  quelques  valeurs  qui  ont ete (ou sont) utilisees sur d'autres
       systemes

       hex    nom        ls   octal    description
       f000   S_IFMT          170000   Masque du type de fichier
       0000                   000000   inoeud hors-service (SCO) ; type inconnu
                                       (BSD) ; SVID-v2 et XPG2 ont 0 et
                                       0100000 pour << fichier ordinaire >>
       1000   S_IFIFO    p|   010000   fifo (tube nomme)
       2000   S_IFCHR    c    020000   fichier special caractere (V7)
       3000   S_IFMPC         030000   fichier special caractere multiplexe
                                       (V7)
       4000   S_IFDIR    d/   040000   repertoire (V7)
       5000   S_IFNAM         050000   fichier special nomme XENIX avec deux
                                       sous-types distingues par
                                       st_rdev valant 1 ou 2
       0001   S_INSEM    s    000001   sous-type semaphore de IFNAM XENIX
       0002   S_INSHD    m    000002   sous-type donnees partagees de IFNAM
                                       XENIX
       6000   S_IFBLK    b    060000   fichier special bloc (V7)
       7000   S_IFMPB         070000   fichier special bloc multiplexe (V7)
       8000   S_IFREG    -    100000   fichier normal (V7)
       9000   S_IFCMP         110000   compresse VxFS
       9000   S_IFNWK    n    110000   fichier special reseau (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 utilise pour les
                                       inoeuds)
       0200   S_ISVTX         001000   << sticky bit >>: garder en memoire
                                       apres execution (V7)
                                       reserve (SVID-v2)
                                       non-repertoires : ne pas swapper le
                                       fichier (SunOS)
                                       repertoires : attribut de restrictions
                                       d'effacement (SVID-v4.2)
       0400   S_ISGID         002000   Fixer le GID a l'execution (V7)
                                       pour les repertoires : semantique BSD
                                       pour la propagation du GID
       0400   S_ENFMT         002000   Verrouillage strict System V
                                       (partage avec S_ISGID)
       0800   S_ISUID         004000   Fixer l'UID a l'execution (V7)
       0800   S_CDF           004000   Le repertoire est un fichier
                                       dependant 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 resolution  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 definie. Ces champs
       sont definis dans POSIX.1-2008 et, a partir  de  la  version  2.12,  la
       glibc  expose  aussi  ces noms de champs si _POSIX_C_SOURCE est definie
       avec une valeur superieure ou egale a 200809L ou si  _XOPEN_SOURCE  est
       definie  avec  une  valeur  superieure ou egale a 700. Si aucune de ces
       macros ne  sont  definies,  alors  les  valeurs  en  nanosecondes  sont
       exposees  avec  des  noms de la forme st_atimensec. Sur les systemes de
       fichiers qui ne gerent pas les resolutions inferieures  a  la  seconde,
       ces champs prennent la valeur 0.

       Sous   Linux,   lstat()   ne  provoque  generalement  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 placee dans ce
       champ.

   Interface noyau sous-jacente
       Avec le temps, l'augmentation de la  taille  de  la  structure  stat  a
       conduit  a  3  versions  successives  de  stat() :  sys_stat()  (entree
       __NR_oldstat),  sys_newstat()  (entree   __NR_stat)   et   sys_stat64()
       (nouveaute  du  noyau  2.4 ;  entree  __NR_stat64).  La fonction stat()
       fournie par la glibc cache ces details aux applications, en appelant la
       version  la  plus recente de l'appel systeme fournie par le noyau et en
       reorganisant si necessaire les informations renvoyees pour les  anciens
       binaires. La meme remarque s'applique a fstat() et lstat().

EXEMPLE

       Le   programme  suivant  appelle  stat()  et  affiche  certains  champs
       selectionnes dans la structure stat renvoyee.

       #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("peripherique bloc\n");       break;
           case S_IFCHR:  printf("peripherique caractere\n");  break;
           case S_IFDIR:  printf("repertoire\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("Numero d'inoeud :                   %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("Proprietaires :                    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 alloues :                    %lld\n",
                   (long long) sb.st_blocks);

           printf("Dernier changement d'etat :        %s", ctime(&sb.st_ctime));
           printf("Dernier acces au fichier :         %s", ctime(&sb.st_atime));
           printf("Derniere 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.27 du projet man-pages
       Linux. Une description du projet et des instructions pour signaler  des
       anomalies       peuvent       etre       trouvees      a      l'adresse
       <URL:http://www.kernel.org/doc/man-pages/>.

TRADUCTION

       Depuis 2010, cette traduction est maintenue a l'aide  de  l'outil  po4a
       <URL:http://po4a.alioth.debian.org/>   par   l'equipe   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'equipe francophone de traduction de Debian (2006-2009).

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

       Vous  pouvez  toujours avoir acces a la version anglaise de ce document
       en utilisant la commande << man -L C <section> <page_de_man> >>.