Available in

(1) (2) (2)/de (2)/es (2)/fr (2)/ja (2)/ko (2)/nl (2)/pl (2)/ru (2freebsd) (3posix)

TOC

STAT(2)                   Manuel du programmeur Linux                  STAT(2)



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 fonctionnalits pour la glibc (voir fea-
   ture_test_macros(7)) :

       lstat() : _BSD_SOURCE || _XOPEN_SOURCE >= 500

DESCRIPTION

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

       stat() rcupre 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-mme plutt que celui  du  fichier
       vis.

       fstat()  est identique  stat(), sauf que le fichier dont l'tat est donn
       est celui rfrenc par le descripteur de fichier fd.

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

           struct stat {
               dev_t     st_dev;      /* Priphrique                  */
               ino_t     st_ino;      /* Numro i-noeud             */
               mode_t    st_mode;     /* Protection                    */
               nlink_t   st_nlink;    /* Nb liens matriels            */
               uid_t     st_uid;      /* UID propritaire              */
               gid_t     st_gid;      /* GID propritaire              */
               dev_t     st_rdev;     /* Type priphrique             */
               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 allous       */
               time_t    st_atime;    /* Heure dernier accs           */
               time_t    st_mtime;    /* Heure dernire modification   */
               time_t    st_ctime;    /* Heure dernier changement tat */
           };

       Le  champ st_dev indique le priphrique sur lequel ce fichier se trouve.

       Le  champ  st_rdev  indique  le  priphrique  que  ce  fichier  (inoeud)
       reprsente.

       Le champ st_size indique la taille du fichier (s'il s'agit d'un fichier
       rgulier ou d'un lien symbolique) en octets. La taille d'un lien symbol-
       ique  est  la  longueur  de la chane reprsentant le chemin d'accs qu'il
       vise, sans le caractre NUL final.

       Le champ st_blocks indique le nombre de blocs de 512 octets  allous  au
       fichier.  Cette  valeur peut tre infrieure  st_size/512 si le fichier a
       des trous.

       Le  champ  st_blksize  donne  la  taille  de  bloc   prfre   pour   des
       entres-sorties  efficaces.  Des  critures par blocs plus petits peuvent
       entraner un cycle lecture/modification/rcriture inefficace.

       Tous les systmes de fichiers de Linux n'implmentent pas tous les champs
       lis   la  date.  Certains  systmes de fichiers autorisent le montage de
       telle manire que les accs ne modifient  pas  le  champ  st_atime  (voir
       l'option  noatime  de mount(8)).

       Le  champ st_atime est modifi par les accs 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-mme,  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  rpertoire  est
       modifi lors de la cration ou la suppression de fichiers en son sein. Le
       champ st_mtime n'est pas mis  jour lors de modification de propritaire,
       groupe, mode ou nombre de liens physiques.

       Le  champ st_ctime est modifi lors d'une criture ou une modification de
       donnes concernant l'inoeud (propritaire, groupe, mode, etc.).

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

           S_ISREG(m)  un fichier ordinaire ?

           S_ISDIR(m)  un rpertoire ?

           S_ISCHR(m)  un priphrique en mode caractre ?

           S_ISBLK(m)  un priphrique en mode 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   priphrique blocs
           S_IFDIR    0040000   rpertoire
           S_IFCHR    0020000   priphrique caractres
           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/excution du propritaire
           S_IRUSR    00400     le propritaire a le droit de lecture
           S_IWUSR    00200     le propritaire a le droit d'criture
           S_IXUSR    00100     le propritaire a le droit d'excution
           S_IRWXG    00070     lecture/criture/excution 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'excution
           S_IRWXO    00007     lecture/criture/excution 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'excution

       Le  bit  Set-GID (S_ISGID) a plusieurs utilisations particulires : pour
       un rpertoire, il indique que la smantique BSD doit tre applique en  son
       sein,  c'est--dire  que les fichiers qui y sont crs hritent leur GID du
       rpertoire et non pas du GID  effectif  du  processus  crateur,  et  les
       sous-rpertoires  auront  automatiquement le bit S_ISGID actif. Pour les
       fichiers  qui  n'ont  pas  d'autorisation  d'excution  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 rpertoire indique que les fichiers qui
       s'y trouvent ne peuvent tre renomms ou effacs que par leur propritaire,
       par le propritaire du rpertoire ou par un processus privilgi.

VALEUR RENVOYE

       En cas de russite, zro est renvoy, sinon -1 est renvoy  et  errno  con-
       tient le code d'erreur.

ERREURS

       EACCES La permission de parcours est refuse pour un des rpertoires con-
              tenu dans le chemin path. (Voir 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 rencontrs dans le chemin d'accs.

       ENAMETOOLONG
              Nom de fichier trop long.

       ENOENT Un composant du chemin path n'existe pas,  ou  il  s'agit  d'une
              chane vide.

       ENOMEM Pas assez de mmoire (mmoire noyau).

       ENOTDIR
              Un lment du chemin d'accs n'est pas un rpertoire.

CONFORMIT

       Ces appels systme 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  interprtation  change
       suivant  les  systmes,  voire  sur  un mme systme s'il y a des montages
       NFS.)

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

       Unix V7 (et les systmes suivants) propose S_IREAD, S_IWRITE, S_IEXEC, l
       o POSIX prfre leurs synonymes S_IRUSR, S_IWUSR, S_IXUSR.

   Autres systmes
       Voici  quelques  valeurs  qui  ont  t  (ou  sont) utilises sur d'autres
       systmes


       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 nomm)
       2000   S_IFCHR    c    020000   fichier spcial caractre (V7)
       3000   S_IFMPC         030000   fichier spcial caractre multiplex (V7)
       4000   S_IFDIR    d/   040000   rpertoire (V7)
       5000   S_IFNAM         050000   fichier spcial nomm XENIX avec deux
                                       sous-types distingus par
                                       st_rdev valant 1 ou 2
       0001   S_INSEM    s    000001   sous-type smaphore de IFNAM XENIX
       0002   S_INSHD    m    000002   sous-type donnes partages de IFNAM
                                       XENIX
       6000   S_IFBLK    b    060000   fichier spcial bloc (V7)
       7000   S_IFMPB         070000   fichier spcial bloc multiplex (V7)
       8000   S_IFREG    -    100000   fichier normal (V7)
       9000   S_IFCMP         110000   compress VxFS
       9000   S_IFNWK    n    110000   fichier spcial rseau (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
                                       inoeuds)
       0200   S_ISVTX         001000    sticky bit : garder en mmoire
                                       aprs excution (V7)
                                       rserv (SVID-v2)
                                       non-rpertoires : ne pas swapper le
                                       fichier (SunOS)
                                       rpertoires : attribut de restrictions
                                       d'effacement (SVID-v4.2)
       0400   S_ISGID         002000   Fixer le GID  l'excution (V7)
                                       pour les rpertoires : smantique BSD
                                       pour la propagation du GID
       0400   S_ENFMT         002000   Verrouillage strict SysV
                                       (partag avec S_ISGID)
       0800   S_ISUID         004000   Fixer l'UID  l'excution (V7)
       0800   S_CDF           004000   Le rpertoire est un fichier
                                       dpendant du contexte (HP-UX)

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

NOTES

   Notes sur Linux
       Depuis le noyau 2.5.48, la structure stat propose une  rsolution  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  dfini, ou bien
       st_atimensec si aucune de ces macros n'est dfinie. Sur les  systmes  de
       fichiers  qui  ne  grent pas les rsolutions infrieures  la seconde, ces
       champs prennent la valeur 0.

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

   Interface noyau sous-jacente
       Avec le temps, l'augmentation de la taille de la structure stat a  con-
       duit
        3  versions  successives  de stat() : sys_stat() (entre __NR_oldstat),
       sys_newstat() (entre __NR_stat)  et  sys_stat64()  (nouveaut  du  noyau
       2.4 ; entre __NR_stat64). La fonction stat() fournie par la glibc cache
       ces dtails aux applications, en appelant la version la plus  rcente  de
       l'appel  systme fournie par le noyau et en rorganisant si ncessaire les
       informations renvoyes  pour  les  anciens  binaires.  La  mme  remarque
       s'applique  fstat() etlstat().

EXEMPLE

       Le  programme  suivant  appelle stat() et affiche certains champs slec-
       tionns dans la structure stat renvoye.

       #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_SUCCESS);
           }

           printf("Type de fichier :                  ");

           switch (sb.st_mode & S_IFMT) {
           case S_IFBLK:  printf("priphrique bloc\n");       break;
           case S_IFCHR:  printf("priphrique caractre\n");  break;
           case S_IFDIR:  printf("rpertoire\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("Numro 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("Propritaires :                    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 allous :                    %lld\n",
                   (long long) sb.st_blocks);

           printf("Dernier changement d'tat :        %s", ctime(&sb.st_ctime));
           printf("Dernier accs au fichier :         %s", ctime(&sb.st_atime));
           printf("Dernire 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), capa-
       bilities(7), symlink(7)

COLOPHON

       Cette  page  fait  partie  de  la  publication 3.07 du projet man-pages
       Linux. Une description du projet et des instructions pour signaler  des
       anomalies    peuvent    tre    trouves     l'adresse    http://www.ker-
       nel.org/doc/man-pages/.

TRADUCTION

       Cette page de manuel a t traduite et mise  jour par  Christophe  Blaess
       <http://www.blaess.fr/christophe/>;  entre  1996 et 2003, puis par Alain
       Portal <aportal AT univ-montp2 DOT fr> jusqu'en 2006, et mise  disposi-
       tion sur http://manpagesfr.free.fr/.

       Les  mises   jour et corrections de la version prsente dans Debian sont
       directement gres par Julien Cristau  <jcristau [AT] debian.org>  et  l'quipe
       francophone de traduction de Debian.

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

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



Linux                           26 juillet 2007                        STAT(2)

COMMENTS

Add your comment here. Whitespace and linebreaks are preserved. URLs are linked automatically.
CAPTCHA

No HTML allowed. URLs will be linked with nofollow attribute. Whitespace is preserved.