Participer au site avec un Tip
Rechercher
 

Améliorations / Corrections

Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.

Emplacement :

Description des améliorations :

Vous êtes un professionnel et vous avez besoin d'une formation ? Programmation avec
Le langage C
Voir le programme détaillé

La librairie <sys/stat.h> (POSIX)

Accès rapide :
Entête à inclure
Types et structures définis dans <sys/stat.h>
Fonctions définies dans <sys/stat.h>
Constantes et macros définies dans <sys/stat.h>
Exemple de code
Conformité
Sujets connexes

L'entête <sys/stat.h> n'appartient pas au langage C ISO : elle est définie par POSIX. Elle est disponible naturellement sur les systèmes Unix, Linux et macOS. Sous Windows, sa disponibilité dépend de l'environnement POSIX utilisé.

Cette entête regroupe les éléments nécessaires à la manipulation des métadonnées de fichiers : type de fichier, droits d'accès, propriétaire, groupe, taille, dates, création de dossiers ou de FIFO, et modification fine des horodatages.

Entête à inclure

#include <sys/stat.h>

Types et structures définis dans <sys/stat.h>

Type Description
blkcnt_tNombre de blocs alloués pour un objet du système de fichiers. Type associé à l'option XSI.
blksize_tTaille de bloc préférée pour les entrées/sorties. Type associé à l'option XSI.
dev_tIdentifiant d'un périphérique.
gid_tIdentifiant d'un groupe.
ino_tNuméro de série d'un fichier dans le système de fichiers.
mode_tType stockant les droits et le type d'un fichier.
nlink_tNombre de liens physiques associés à un fichier.
off_tOffset ou taille exprimée en octets.
time_tTemps exprimé en secondes depuis l'Epoch Unix.
uid_tIdentifiant d'un utilisateur.
struct statStructure contenant les métadonnées d'un fichier.
struct timespecStructure utilisée pour les horodatages fins, définie comme dans <time.h>.

Fonctions définies dans <sys/stat.h>

Fonction Description
chmodChange les droits d'accès d'un fichier désigné par son chemin.
fchmodChange les droits d'accès d'un fichier désigné par un descripteur.
fchmodatChange les droits d'un fichier à partir d'un dossier de référence et d'un chemin relatif.
fstatRécupère les métadonnées d'un fichier désigné par un descripteur.
fstatatRécupère les métadonnées d'un fichier à partir d'un dossier de référence et d'un chemin relatif.
futimensModifie les horodatages d'un fichier désigné par un descripteur.
lstatRécupère les métadonnées d'un lien symbolique sans le déréférencer.
mkdirCrée un dossier.
mkdiratCrée un dossier à partir d'un dossier de référence et d'un chemin relatif.
mkfifoCrée un fichier spécial FIFO.
mkfifoatCrée un fichier spécial FIFO à partir d'un dossier de référence.
mknodCrée un fichier spécial. Cette fonction est associée à l'option XSI.
mknodatCrée un fichier spécial à partir d'un dossier de référence. Cette fonction est associée à l'option XSI.
statRécupère les métadonnées d'un fichier désigné par son chemin.
umaskFixe le masque de création des droits pour le processus courant.
utimensatModifie les horodatages d'un fichier à partir d'un dossier de référence.

Constantes et macros définies dans <sys/stat.h>

Les constantes et macros de cette entête permettent de construire des droits d'accès, de tester le type d'un fichier et de piloter les fonctions d'horodatage.

Élément Description
S_IFMT, S_IFBLK, S_IFCHR, S_IFDIR, S_IFIFO, S_IFLNK, S_IFREG, S_IFSOCKMasques et valeurs de type de fichier, associés à l'option XSI.
S_ISBLK, S_ISCHR, S_ISDIR, S_ISFIFO, S_ISLNK, S_ISREG, S_ISSOCKMacros de test du type de fichier à partir du champ st_mode.
S_TYPEISMQ, S_TYPEISSEM, S_TYPEISSHM, S_TYPEISTMOMacros de test pour certains objets POSIX particuliers.
S_IRUSR, S_IWUSR, S_IXUSR, S_IRWXUDroits d'accès du propriétaire.
S_IRGRP, S_IWGRP, S_IXGRP, S_IRWXGDroits d'accès du groupe.
S_IROTH, S_IWOTH, S_IXOTH, S_IRWXODroits d'accès des autres utilisateurs.
S_ISUID, S_ISGID, S_ISVTXBits spéciaux : set-user-ID, set-group-ID et sticky bit.
UTIME_NOW, UTIME_OMITValeurs spéciales pour futimens et utimensat.

Exemple de code

L'exemple suivant récupère les métadonnées d'un chemin et affiche quelques informations importantes.

 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 
#define _POSIX_C_SOURCE 200809L

#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>

int main(int argc, char * argv[]) {

    if (argc != 2) {
        printf("Usage: %s path\n", argv[0]);
        return EXIT_FAILURE;
    }

    struct stat informations;
    if (stat(argv[1], &informations) == -1) {
        perror("stat");
        return EXIT_FAILURE;
    }

    printf("Taille : %ld octets\n", (long) informations.st_size);
    printf("Liens  : %ld\n", (long) informations.st_nlink);

    if (S_ISDIR(informations.st_mode)) {
        puts("Type   : dossier");
    } else if (S_ISREG(informations.st_mode)) {
        puts("Type   : fichier régulier");
    } else {
        puts("Type   : autre");
    }

    return EXIT_SUCCESS;
}
Lecture des métadonnées d'un fichier

Conformité

Les éléments présentés ici suivent la définition POSIX de <sys/stat.h>. La référence utilisée est la documentation POSIX.1-2024 publiée par The Open Group : <sys/stat.h>.

Sujets connexes

Présentation du standard POSIX
<dirent.h>
<unistd.h>


Vous êtes un professionnel et vous avez besoin d'une formation ? Programmation avec
Le langage C
Voir le programme détaillé