Provided by: manpages-fr-dev_3.32d0.2p4-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() :
           _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 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 (1<<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). Si vous avez besoin de connaitre la definition des types blkcnt_t
       ou blksize_t de <sys/stat.h>, alors definissez _XOPEN_SOURCE  avec  une
       valeur superieure ou egale a 500 (avant d'inclure tout en-tete).

       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.32  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> >>.

Linux                           3 decembre 2010                        STAT(2)