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é

Types de fichiers (POSIX)

Entête à inclure

#include <sys/stat.h>

Types de fichiers

POSIX fournit deux familles d'éléments pour manipuler le type d'un fichier. Les constantes S_IF... permettent de construire ou d'isoler les bits de type, tandis que les macros S_IS... sont la façon la plus lisible de tester un champ st_mode.

ÉlémentDescription
S_IFMTMasque permettant d'isoler les bits de type de fichier. Élément associé à l'option XSI.
S_IFBLKFichier spécial bloc. Élément associé à l'option XSI.
S_IFCHRFichier spécial caractère. Élément associé à l'option XSI.
S_IFDIRDossier. Élément associé à l'option XSI.
S_IFIFOFIFO. Élément associé à l'option XSI.
S_IFLNKLien symbolique. Élément associé à l'option XSI.
S_IFREGFichier régulier. Élément associé à l'option XSI.
S_IFSOCKSocket. Élément associé à l'option XSI.
S_ISBLK(m)Teste si m décrit un fichier spécial bloc.
S_ISCHR(m)Teste si m décrit un fichier spécial caractère.
S_ISDIR(m)Teste si m décrit un dossier.
S_ISFIFO(m)Teste si m décrit une FIFO.
S_ISLNK(m)Teste si m décrit un lien symbolique.
S_ISREG(m)Teste si m décrit un fichier régulier.
S_ISSOCK(m)Teste si m décrit une socket.
S_TYPEISMQ(buf)Teste si la structure décrit une file de messages POSIX.
S_TYPEISSEM(buf)Teste si la structure décrit un sémaphore POSIX.
S_TYPEISSHM(buf)Teste si la structure décrit un objet de mémoire partagée POSIX.
S_TYPEISTMO(buf)Teste si la structure décrit un objet de mémoire typée. Élément associé à l'option TYM.

Exemple de code

Le programme suivant teste le type d'un chemin à partir du champ st_mode.

 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 
#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 (lstat(argv[1], &informations) == -1) {
        perror("lstat");
        return EXIT_FAILURE;
    }

    if (S_ISLNK(informations.st_mode)) {
        puts("Lien symbolique");
    } else if (S_ISDIR(informations.st_mode)) {
        puts("Dossier");
    } else if (S_ISREG(informations.st_mode)) {
        puts("Fichier régulier");
    }

    return EXIT_SUCCESS;
}
Test du type d'un fichier

Sujets connexes

lstat
stat
struct stat


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