1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345
|
.\" Hey Emacs! This file is -*- nroff -*- source.
.\"
.\" Copyright (c) 1992 Drew Eckhardt (drew@cs.colorado.edu), March 28, 1992
.\" Parts Copyright (c) 1995 Nicolai Langfeldt (janl@ifi.uio.no), 1/1/95
.\"
.\" Permission is granted to make and distribute verbatim copies of this
.\" manual provided the copyright notice and this permission notice are
.\" preserved on all copies.
.\"
.\" Permission is granted to copy and distribute modified versions of this
.\" manual under the conditions for verbatim copying, provided that the
.\" entire resulting derived work is distributed under the terms of a
.\" permission notice identical to this one
.\"
.\" Since the Linux kernel and libraries are constantly changing, this
.\" manual page may be incorrect or out-of-date. The author(s) assume no
.\" responsibility for errors or omissions, or for damages resulting from
.\" the use of the information contained herein. The author(s) may not
.\" have taken the same level of care in the production of this manual,
.\" which is licensed free of charge, as they might when working
.\" professionally.
.\"
.\" Formatted or processed versions of this manual, if unaccompanied by
.\" the source, must acknowledge the copyright and authors of this work.
.\"
.\" Modified by Michael Haardt (u31b3hs@pool.informatik.rwth-aachen.de)
.\" Modified Sat Jul 24 10:54:27 1993 by Rik Faith (faith@cs.unc.edu)
.\" Modified Thu May 18 11:00:31 1995 by Rik Faith (faith@cs.unc.edu)
.\" to add comments suggested by Todd Larason (jtl@molehill.org)
.\"
.\" Traduction 13/10/1996 par Christophe Blaess (ccb@club-internet.fr)
.\" Mise a Jour 15/04/97
.\" mj 11/12/1997 (LDP man-pages 1.18)
.\" Mise jour 12/12/1998 - LDP-man-pages-1.21
.\" mj 09/04/1999 - LDP-man-pages-1.22
.\" mj 18/05/1999 (LDP man-pages 1.23)
.TH STAT 2 "18 Mai 1999" Linux "Manuel du programmeur Linux"
.SH NOM
stat, fstat, lstat \- Obtenir le statut d'un fichier (file status).
.SH SYNOPSIS
.B #include <sys/stat.h>
.br
.B #include <unistd.h>
.sp
.BI "int stat(const char *" file_name ", struct stat *" buf );
.br
.BI "int fstat(int " filedes ", struct stat *" buf );
.br
.BI "int lstat(const char *" file_name ", struct stat *" buf );
.SH DESCRIPTION
.PP
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 avoir le droit
de parcours de tous les rpertoires mentionns dans le
chemin menant au fichier.
.PP
.B stat
rcupre le statut du fichier point par
.I file_name
et remplit le buffer
.IR buf .
.B lstat
est identique
.BR stat ,
sauf qu'il donne le statut d'un lien lui-mme et non pas du
fichier point par ce lien.
.B fstat
est identique \fBstat\fP, sauf que le fichier ouvert est point
par le descripteur
.IR filedes ,
obtenu avec
.IR open(3) .
.PP
Les trois fonctions retournent une structure
.I stat
contenant les champs suivants :
.PP
.RS
.nf
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 */
unsigned long st_blksize; /* Taille de bloc pour E/S */
unsigned long 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 */
};
.fi
.RE
.PP
La valeur
.I st_blocks
donne la taille du fichier en blocs de 512 octets.
La valeur
.I st_blksize
indique la taille de bloc "prfre" pour les entres/sorties du systme
(l'criture dans un fichier par petits morceaux peut induire de nombreuses
tapes lecture-modification-criture peu efficaces).
.PP
Les systmes de fichiers de Linux n'implmentent pas tous les
champs "time".
Traditionnellement
.I st_atime
est modifi par
.BR mknod "(2), " utime "(2), " read "(2), " write "(2), et " truncate (2).
Gnralement
.I st_mtime
est modifi par
.BR mknod "(2), " utime "(2), et " write (2).
mais
.I pas
en cas de modification de propritaire, de groupe, de compte de liens physiques ou
de mode.
Traditionnellement
.I st_ctime
est modifi par une criture, une lecture, ou une modification de donnes
concernant l'i-noeud (propritaire, groupe, mode, etc...)
.PP
Les macros POSIX suivantes sont fournies pour manipuler les statuts d'un fichier
.RS
.TP 1.2i
S_ISLNK(m)
est-ce un lien symbolique ?
.TP
S_ISREG(m)
un fichier rgulier ?
.TP
S_ISDIR(m)
un rpertoire ?
.TP
S_ISCHR(m)
un pripherique en mode caractre ?
.TP
S_ISBLK(m)
un priphrique en mode blocs ?
.TP
S_ISFIFO(m)
une FIFO ?
.TP
S_ISSOCK(m)
une socket ?
.RE
.PP
Les attributs suivants correspondent au champ
.I st_mode.
.RS
.TP 0.9i
S_IFMT
00170000 (non POSIX) masque de l'ensemble des bits du type de fichier
.TP
S_IFSOCK
0140000 (non POSIX) socket
.TP
S_IFLNK
0120000 (non POSIX) lien symbolique
.TP
S_IFREG
0100000 (non POSIX) fichier rgulier
.TP
S_IFBLK
0060000 (non POSIX) priphrique blocs
.TP
S_IFDIR
0040000 (non POSIX) rpertoire
.TP
S_IFCHR
0020000 (non POSIX) priphrique caractres
.TP
S_IFIFO
0010000 (non POSIX) fifo
.TP
S_ISUID
0004000 bit Set-UID
.TP
S_ISGID
0002000 bit Set-Gid
.TP
S_ISVTX
0001000 (non POSIX) bit "sticky"
.TP
S_IRWXU
00700 droits de lecture/criture/excution du propritaire
.TP
S_IRUSR
00400 le propritaire a le droit de lecture (comme S_IREAD qui n'est pas POSIX)
.TP
S_IWUSR
00200 le propritaire a le droit d'criture (comme S_IWRITE qui n'est pas POSIX)
.TP
S_IXUSR
00100 le propritaire a le droit d'excution (comme S_IEXEC qui n'est pas POSIX)
.TP
S_IRWXG
00070 droits de lecture/criture/excution du groupe
.TP
S_IRGRP
00040 le groupe a le droit de lecture
.TP
S_IWGRP
00020 le groupe a le droit d'criture
.TP
S_IXGRP
00010 le groupe a le droit d'excution
.TP
S_IRWXO
00007 droits de lecture/criture/excution des autres
.TP
S_IROTH
00004 les autres ont le droit de lecture
.TP
S_IWOTH
00002 les autres ont le droit d'criture
.TP
S_IXOTH
00001 les autres ont le droit d'excution
.RE
.SH "VALEUR RENVOYE"
Ces fonctions
retournent zro si elles russissent.
En cas d'echec \-1 est renvoy, et
.I errno
contient le code d'erreur.
.SH ERREURS
.TP 0.8i
.B EBADF
.I filedes
est un mauvais descripteur.
.TP
.B ENOENT
Un composant de
.I file_name
n'existe pas, ou il s'agit d'une chaine vide.
.TP
.B ENOTDIR
Un composant du chemin d'accs n'est pas un rpertoire.
.TP
.B ELOOP
Trop de liens symboliques rencontrs dans le chemin d'accs.
.TP
.B EFAULT
Un pointeur se trouve en dehors de l'espace d'adressage.
.TP
.B EACCES
Autorisation refuse.
.TP
.B ENOMEM
Pas assez de mmoire pour le noyau.
.TP
.B ENAMETOOLONG
Nom de fichier trop long
.SH EXEMPLE
.nf
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <unistd.h>
int
main (int nb_args, char * args [])
{
struct stat sts;
if (nb_args != 2) {
fprintf (stderr, "syntaxe : %s <fichier>\\n", args [0]);
exit (1);
}
if ( stat (args [1], & sts) != 0) {
fprintf (stderr, "%s : erreur %X\\n", args [0], errno);
exit (1);
}
fprintf (stdout,
"Priphrique : %d\\n",
sts . st_dev);
fprintf (stdout,
"Noeud : %ld\\n",
sts . st_ino);
fprintf (stdout,
"Protection : %o\\n",
sts . st_mode);
fprintf (stdout,
"nb liens matriels: %d\\n",
sts . st_nlink);
fprintf (stdout,
"ID propritaire : %d\\n",
sts . st_uid);
fprintf (stdout,
"ID groupe: %d\\n",
sts . st_gid);
fprintf (stdout,
"Taille : %lu octets\\n",
sts . st_size);
fprintf (stdout,
"Taille de bloc : %lu\\n",
sts . st_blksize);
fprintf (stdout,
"Nombre de blocs : %lu\\n",
sts . st_blocks);
}
.fi
.SH "CONFORMIT"
Les appels
.BR stat ", et" fstat
sont conformes aux versions SVr4, PPOSIX, X/OPEN, BSD 4.3.
L'appel
.BR lstat
est conforme aux versions BSD 4.3 et SVr4.
SVr4 mentionne des conditions d'erreurs supplmentaires pour
.BR lstat
EINTR, ENOLINK, et EOVERFLOW.
Pour
.BR stat ", et" lstat
SVr4 indique les conditions supplmentaires EACCES, EINTR,
EMULTIHOP, ENOLINK, et EOVERLOW.
L'utilisation des champs
.I st_blocks
et
.I st_blksize
risque d'tre moins portable. Ils ont t introduit dans BSD,
et ne sont pas mentionne dans POSIX. Leur interprtation change
suivant les systmes, voire sur un mme systme s'il y a des
montages NFS.
.SH "VOIR AUSSI"
.BR chmod (2),
.BR chown (2),
.BR readlink (2),
.BR utime (2)
.SH TRADUCTION
Christophe Blaess, 1997.
|