#include <sys/stat.h>
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ément | Description |
|---|---|
S_IFMT | Masque permettant d'isoler les bits de type de fichier. Élément associé à l'option XSI. |
S_IFBLK | Fichier spécial bloc. Élément associé à l'option XSI. |
S_IFCHR | Fichier spécial caractère. Élément associé à l'option XSI. |
S_IFDIR | Dossier. Élément associé à l'option XSI. |
S_IFIFO | FIFO. Élément associé à l'option XSI. |
S_IFLNK | Lien symbolique. Élément associé à l'option XSI. |
S_IFREG | Fichier régulier. Élément associé à l'option XSI. |
S_IFSOCK | Socket. É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. |
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; } |
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 :