| statx(2) | System Calls Manual | statx(2) |
statx - Afficher l'état d'un fichier (étendu)
Bibliothèque C standard (libc, -lc)
#define _GNU_SOURCE /* Consultez feature_test_macros(7) */ #include <fcntl.h> /* Définitions des constantes AT_* */ #include <sys/stat.h>
int statx(int dirfd, const char *restrictnom_chemin, intflags,
unsigned int mask, struct statx *restrict statxbuf);
Cette fonction renvoie des informations sur un fichier, le stockant dans le tampon pointé par statxbuff. Le tampon renvoyé est une structure du type suivant :
struct statx {
__u32 stx_mask; /* Masque d'octets indiquant
les champs remplis */
__u32 stx_blksize; /* Taille de bloc pour les E/S du système de fichiers */
__u64 stx_attributes; /* Indicateurs d'attribut de fichier supplémentaire */
__u32 stx_nlink; /* Nombre de liens directs */
__u32 stx_uid; /* UID du propriétaire */
__u32 stx_gid; /* GID du propriétaire */
__u16 stx_mode; /* Type de fichier et mode */
__u64 stx_ino; /* Numéro d'inœud */
__u64 stx_size; /* Taille totale en octets */
__u64 stx_blocks; /* Nombre de blocs de 512 o alloués */
__u64 stx_attributes_mask;
/* Masque pour montrer ce qui est pris en charge
dans stx_attributes */
/* Les champs suivants sont des fichiers d'horodatage */
struct statx_timestamp stx_atime; /* Dernier accès */
struct statx_timestamp stx_btime; /* Création */
struct statx_timestamp stx_ctime; /* Dernier changement d'état */
struct statx_timestamp stx_mtime; /* Dernière modification */
/* Si ce fichier représente un périphérique, alors les
deux champs suivants contiennent l'identifiant du périphérique */
__u32 stx_rdev_major; /* Identifiant majeur */
__u32 stx_rdev_minor; /* Identifiant mineur */
/* Les deux champs suivants contiennent l'identifiant du périphérique
contenant le système de fichier où est situé le fichier */
__u32 stx_dev_major ; /* ID majeur */
__u32 stx_dev_minor ; /* ID mineur */
__u64 stx_mnt_id; /* ID de montage */
/* Restrictions d'alignement d'E/S directes */
__u32 stx_dio_mem_align;
__u32 stx_dio_offset_align;
};
Les horodatages de fichier sont des structures du type suivant :
struct statx_timestamp {
__s64 tv_sec; /* Secondes depuis l'Epoch (temps UNIX) */
__u32 tv_nsec; /* Nanosecondes depuis tv_sec */
};
(Notez que l'espace réservé et le remplissage sont ommis.)
Pour accéder à l'état d'un fichier, aucune autorisation n'est requise sur le fichier lui-même, mais dans le cas de statx() avec un nom de chemin, la permission d'exécution (recherche) est requise sur tous les répertoires du nom_chemin qui mènent au fichier.
statx() utilise nom_chemin, dirfd, et flags pour identifier le fichier cible d'une des façons suivantes :
flags peut être utilisé pour influencer une recherche par nom de chemin. Une valeur pour flags est construite par une association OU binaire de zéro ou plus des constantes suivantes :
flags peut aussi être utilisé pour contrôler quelle sorte de synchronisation le noyau effectuera lors d'une demande d'un fichier sur un système de fichiers distant. Cela est fait par l'utilisation d'un OU binaire d'une des valeurs suivantes :
L'argument mask à statx() est utilisé pour dire au noyau quels champs intéressent l'appelant. mask est une combinaison liée par un OU binaire des constantes suivantes :
| STATX_TYPE | Nécessite stx_mode et S_IFMT |
| STATX_MODE | Nécessite stx_mode et ~S_IFMT |
| STATX_NLINK | Nécessite stx_nlink |
| STATX_UID | Nécessite stx_uid |
| STATX_GID | Nécessite stx_gid |
| STATX_ATIME | Nécessite stx_atime |
| STATX_MTIME | Nécessite stx_mtime |
| STATX_CTIME | Nécessite stx_ctime |
| STATX_INO | Nécessite stx_ino |
| STATX_SIZE | Nécessite stx_size |
| STATX_BLOCKS | Nécessite stx_blocks |
| STATX_BASIC_STATS | [Tous ceux ci-dessus] |
| STATX_BTIME | Nécessite stx_btime |
| STATX_ALL | Identique à STATX_BASIC_STATS | STATX_BTIME. |
| La commande est obsolète et ne devrait pas être utilisée. | |
| STATX_MNT_ID | Nécessite stx_mnt_id (depuis Linux 5.8) |
| STATX_DIOALIGN | Nécessite stx_dio_mem_align et stx_dio_offset_align |
| (depuis Linux 6.1 ; prise en charge selon le système de fichiers) |
Remarquez que, en général, le noyau ne rejette pas des valeurs dans mask autres que celles ci-dessus. (Pour une exception, voir EINVAL dans les erreurs.) Au lieu de cela, il informe simplement l'appelant des valeurs prises en charge par ce noyau et ce système de fichiers à l'aide du champ statx.stx_mask. Par conséquent, ne pas se contenter de mettre mask à UINT_MAX (tous les bits sont mis), car un ou plusieurs bits peuvent, à l'avenir, être utilisés pour spécifier une extension au tampon.
L'information d'état pour le fichier cible est renvoyée dans la structure statx pointée par statxbuf. On y trouve stx_mask qui indique quelles autres informations ont été renvoyées. stx_mask a le même format que l'argument mask et les bits y sont définis pour indiquer quels champs ont été remplis.
Il convient de noter que le noyau peut renvoyer des champs qui n'ont pas été demandés et peut ne pas renvoyer des champs qui ont été demandés, en fonction de ce que le système de fichiers sous-jacent prend en charge. (Les champs qui reçoivent des valeurs alors qu'ils ne sont pas demandés peuvent être simplement ignorés.) Dans les deux cas, stx_mask ne sera pas égal à mask.
Si un système de fichiers ne prend pas en charge un champ ou qu'il y a une valeur non représentable (par exemple, un fichier d'un type exotique), alors le bit masqué correspondant à ce champ sera effacé de stx_mask même si l'utilisateur l'a demandé et une valeur fictive sera remplie à des fins de compatibilité s'il en existe une (par exemple un UID ou un GID fictifs pourront être indiqués pour monter sous certaines circonstances).
Un système de fichiers peut également remplir des champs que l'appelant n'a pas demandé s'il dispose de valeurs pour ces champs et si l'information est disponible sans coût supplémentaire. Si cela se produit, les bits correspondants seront mis dans stx_mask.
Note : pour la performance et des raisons de simplicité, des champs différents dans la structure statx devraient contenir les informations d'état des divers moments de l'exécution de l'appel système. Par exemple, si stx_mode ou stx_uid est changé par un autre processus par un appel chmod(2) ou chown(2), stat() devrait renvoyer l'ancien stx_mode avec le nouveau stx_uid, ou l'ancien stx_uid avec le nouveau stx_mode.
À part ceux du stx_mask (qui est décrit ci-dessus), les champs de la structure statx sont :
Pour plus d'information sur les champs ci-dessus, voir inode(7).
Le champ stx_attributes contient un ensemble de drapeaux liés par un OU binaire qui indiquent les attributs additionnels du fichier. Veuillez noter que tout attribut qui n'est pas indiqué comme pris en charge par stx_attributes_mask n'a pas de valeur utilisable ici. Les bits dans stx_attributes_mask correspondent bit par bit à stx_attributes.
Les drapeaux sont de la forme suivante :
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.
statx() a été ajouté dans Linux 4.11 ; la prise en charge de la bibliothèque a été ajoutée dans glibc 2.28.
statx() est spécifique à Linux.
ls(1), stat(1), access(2), chmod(2), chown(2), name_to_handle_at(2), readlink(2), stat(2), utime(2), proc(5), capabilities(7), inode(7), symlink(7)
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 bubu <bubub@no-log.org>
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.
| 5 février 2023 | Pages du manuel de Linux 6.03 |