Man page - oldstat(2)

Packages contains this manual

Available languages:

en fr pl nl ja ru de

Manual

stat

NOM
BIBLIOTHÈQUE
SYNOPSIS
DESCRIPTION
La structure stat
fstatat()
VALEUR RENVOYÉE
ERREURS
STANDARDS
HISTORIQUE
Différences entre bibliothÚque C et noyau
EXEMPLES
VOIR AUSSI
TRADUCTION

NOM

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

BIBLIOTHÈQUE

BibliothĂšque C standard ( libc , -lc )

SYNOPSIS

#include <sys/stat.h>

int stat(const char *restrict chemin ,
struct stat *restrict
statbuf );
int fstat(int
fd , struct stat * statbuf );
int lstat(const char *restrict
chemin ,
struct stat *restrict
statbuf );

#include <fcntl.h> /* Définition des constantes AT_* */
#include <sys/stat.h>

int fstatat(int dirfd , const char *restrict chemin ,
struct stat *restrict
statbuf , int attributs );

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

lstat () :
/* Depuis la glibc 2.20 */ _DEFAULT_SOURCE
|| _XOPEN_SOURCE >= 500
|| /* Depuis la glibc 2.10 : */ _POSIX_C_SOURCE >= 200112L
|| /* Pour la glibc antérieure et égale à 2.19 */ _BSD_SOURCE

fstatat () :
Depuis la glibc 2.10 :
_POSIX_C_SOURCE >= 200809L
avant la glibc 2.10 :
_ATFILE_SOURCE

DESCRIPTION

Ces fonctions renvoient des renseignements sur le fichier indiquĂ©, dans le tampon pointĂ© par statbuf . Vous n’avez besoin d’aucun droit d’accĂšs au fichier pour obtenir les informations, mais vous devez — dans le cas de stat (), fstatat () et lstat () — avoir le droit d’exĂ©cuter (search) sur tous les rĂ©pertoires mentionnĂ©s dans le chemin menant au fichier.

stat () et fstatat () récupÚrent des renseignements sur le fichier pointé par chemin . Les différences de fstatat () sont décrites ci-dessous :

lstat () est identique Ă  stat (), sauf que dans le cas oĂč chemin est un lien symbolique, auquel cas il renvoie des renseignements sur le lien lui-mĂȘme plutĂŽt que celui du fichier visĂ©.

fstat () est identique à stat (), sauf que le fichier dont les renseignements sont à récupérer est référencé par le descripteur de fichier fd .

La structure stat

Les trois fonctions renvoient une structure stat (consultez stat (3type)).

Note : pour des raisons de performance et de simplicitĂ©, diffĂ©rents champs dans la structure stat peuvent contenir des informations d’état Ă  diffĂ©rents moments durant l’exĂ©cution de l’appel systĂšme. Par exemple, si st_mode ou st_uid sont modifiĂ©s par un autre processus en appelant chmod (2) ou chown (2), stat () peut renvoyer l’ancien st_mode en mĂȘme temps que le nouveau st_uid ou l’ancien st_uid en mĂȘme temps que le nouveau st_mode .

fstatat()

L’appel systĂšme fstatat () est une interface plus gĂ©nĂ©rale pour accĂ©der Ă  des informations de fichier qui peut encore fournir exactement le comportement de chaque appel Ă  stat (), lstat () et fstat ().

Si le chemin donnée dans chemin est un chemin relatif, il est interprété par rapport au répertoire référencé par le descripteur de fichier dirfd , (plutÎt que par rapport au répertoire courant du processus appelant, comme avec stat () et lstat () pour un chemin relatif).

Si chemin est relatif, et si dirfd est la valeur spéciale AT_FDCWD , chemin est interprété comme étant relatif au répertoire courant du processus appelant, comme stat () et lstat ().

Si pathname est absolu, alors dirfd est ignoré.

L’argument attributs est soit 0, soit un OU binaire « | » avec les options suivantes :
AT_EMPTY_PATH
(depuis Linux 2.6.39)

Si chemin est une chaĂźne vide, opĂ©rer sur le fichier rĂ©fĂ©rencĂ© par dirfd (qui peut avoir Ă©tĂ© obtenu en utilisant open (2) avec l’attribut O_PATH ). Dans ce cas, dirfd peut rĂ©fĂ©rencer tout type de fichier, pas uniquement un rĂ©pertoire et le comportement de fstatat () est similaire Ă  celui de fstat (). Si dirfd est AT_FDCWD , l’appel opĂšre sur le rĂ©pertoire de travail actuel. Cet attribut est spĂ©cifique Ă  Linux, _GNU_SOURCE doit ĂȘtre dĂ©finie pour obtenir sa dĂ©finition.

AT_NO_AUTOMOUNT (depuis Linux 2.6.38)

Ne pas monter automatiquement la partie terminal (« basename ») de chemin . Depuis Linux 3.1, cet attribut est ignoré. Depuis Linux 4.11, cet attribut est implicite.

AT_SYMLINK_NOFOLLOW

Si chemin est un lien symbolique, ne pas le dĂ©rĂ©fĂ©rencer, mais renvoyer des informations sur le lien lui-mĂȘme, comme le fait lstat (2). (Par dĂ©faut, fstatat () dĂ©rĂ©fĂ©rence les liens symboliques, comme stat (2).)

Consultez openat (2) pour une explication de la nécessité de fstatat ().

VALEUR RENVOYÉE

En cas de succĂšs, zĂ©ro est renvoyĂ©. En cas d’erreur, -1 est renvoyĂ© et errno est dĂ©finie pour prĂ©ciser l’erreur.

ERREURS

EACCES

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

EBADF

Le descripteur de fichier fd est non valable.

EBADF

( fstatat ()) chemin est relatif mais dirfd n’est ni AT_FDCWD ni un descripteur de fichier valable.

EFAULT

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

EINVAL

( fstatat ()) attributs contient un attribut non valable.

ELOOP

Trop de liens symboliques rencontrĂ©s dans le chemin d’accĂšs.

ENAMETOOLONG

nom_chemin est trop long.

ENOENT

Un composant du chemin d’accùs chemin n’existe pas ou est un lien symbolique pointant nulle part.

ENOENT

chemin est une chaĂźne vide et AT_EMPTY_PATH n’a pas Ă©tĂ© spĂ©cifiĂ© dans attributs .

ENOMEM

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

ENOTDIR

Un Ă©lĂ©ment du prĂ©fixe de chemin n’est pas un rĂ©pertoire.

ENOTDIR

( fstatat ()) chemin est relatif et dirfd est un descripteur de fichier faisant rĂ©fĂ©rence Ă  un fichier qui n’est pas un dossier.

EOVERFLOW

chemin ou fd font rĂ©fĂ©rence Ă  un fichier dont la taille, l’inƓud ou le nombre de blocs ne peut pas ĂȘtre reprĂ©sentĂ© respectivement avec le type off_t , ino_t ou blkcnt_t . Cela peut arriver par exemple 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 octets.

STANDARDS

POSIX.1-2008.

HISTORIQUE

stat ()

fstat ()
lstat
()

SVr4, 4.3BSD, POSIX.1-2001.

fstatat ()

POSIX.1-2008. Linux 2.6.16, glibc 2.4.

D’aprĂšs POSIX.1-2001, lstat () sur un lien symbolique ne doit renvoyer des informations valables que dans le champ st_size et le type de fichier du champ st_mode de la structure stat . POSIX.1-2008 renforce la spĂ©cification, obligeant lstat () Ă  renvoyer des informations valables dans tous les champs Ă  part les bits de mode dans st_mode .

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

Différences entre bibliothÚque C et noyau

Avec le temps, l’augmentation de la taille de la structure stat a conduit Ă  trois versions successives de stat () : sys_stat () (slot __NR_oldstat ), sys_newstat () (slot __NR_stat ) et sys_stat64 () __NR_stat64 ) sur les plateformes 32 bits telles que i386. Les deux premiĂšres versions Ă©taient dĂ©jĂ  prĂ©sentes dans Linux 1.0 (quoiqu’avec des noms diffĂ©rents), la derniĂšre a Ă©tĂ© ajoutĂ©e dans Linux 2.4. La mĂȘme remarque s’applique Ă  fstat () et lstat ().

Les versions internes du noyau de la structure stat traitées par les différentes versions étaient respectivement :
__old_kernel_stat

La structure d’origine avec des champs plutĂŽt Ă©troits et pas de remplissage.

stat

Un champ plus grand st_ino et le remplissage ont été ajoutés dans différentes parties de la structure pour autoriser un agrandissement futur.

stat64

Un champ st_ino encore plus grand, des champs st_uid et st_gid plus grands pour s’adapter Ă  l’extension Ă  32 bits des UID et GID dans Linux 2.4 et d’autres champs agrandis ainsi que plus de remplissage dans la structure. (Divers octets de remplissage Ă©taient finalement consommĂ©s dans Linux 2.6 avec l’introduction d’ID de pĂ©riphĂ©rique 32 bits et des composants en nanosecondes dans les champs d’horodatage.)

La fonction d’enveloppe stat () de la glibc dissimule ces dĂ©tails aux applications invoquant la version la plus rĂ©cente de l’appel systĂšme fourni par le noyau, et recompresse l’information renvoyĂ©e si nĂ©cessaire pour les binaires anciens.

Dans les systùmes modernes 64 bits, la vie est plus simple : il n’y a qu’un seul appel systùme stat () et le noyau s’occupe de la structure stat qui contient des champs d’une taille suffisante.

L’appel systĂšme sous-jacent employĂ© par la fonction d’enveloppe fstatat() de la glibc s’appelle en fait fstatat64 () ou, sur certaines architectures, newfstatat ().

EXEMPLES

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

#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/sysmacros.h>
#include <time.h>
int
main(int argc, char *argv[])
{
struct stat sb;
if (argc != 2) {
fprintf(stderr, "Utilisation : %s <chemin>\n", argv[0]);
exit(EXIT_FAILURE);
}
if (lstat(argv[1], &sb) == -1) {
perror("lstat");
exit(EXIT_FAILURE);
}
printf("ID du périphérique contenant : [%x,%x]\n",
major(sb.st_dev),
minor(sb.st_dev));
printf("Type de fichier : ");
switch (sb.st_mode & S_IFMT) {
case S_IFBLK: printf("block device\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 : %ju\n", (uintmax_t) sb.st_ino);
printf("Mode: %jo (octal)\n",
(uintmax_t) sb.st_mode);
printf("Nombre de liens : %ju\n", (uintmax_t) sb.st_nlink);
printf("Propriétaires : UID=%ju GID=%ju\n",
(uintmax_t) sb.st_uid, (uintmax_t) sb.st_gid);
printf("Taille de bloc d’E/S : %jd bytes\n",
(intmax_t) sb.st_blksize);
printf("Taille du fichier  %jd bytes\n",
(intmax_t) sb.st_size);
printf("Blocs alloués : %jd\n",
(intmax_t) 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

ls (1), stat (1), access (2), chmod (2), chown (2), readlink (2), statx (2), utime (2), stat (3type), capabilities (7), inode (7), symlink (7)

TRADUCTION

La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org> et Jean-Pierre Giraud <jean-pierregiraud@neuf.fr>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n’y a aucune RESPONSABILITÉ LÉGALE.

Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org .