#include <dirent.h>
DIR * fdopendir( int fd );
La fonction fdopendir construit un flux de dossier à partir d'un descripteur de fichier déjà ouvert. Elle est utile quand le code possède déjà un descripteur et souhaite ensuite utiliser l'API readdir.
En cas de succès, la fonction renvoie un pointeur de type DIR *. En cas d'erreur, elle renvoie NULL et positionne errno.
fdopendir réussit, le flux de dossier devient propriétaire du descripteur. Il faudra donc fermer le flux avec closedir, et ne pas appeler directement close sur le même descripteur.
Le programme suivant ouvre d'abord un dossier avec open, puis transforme le descripteur obtenu en flux de dossier.
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 |
#define _POSIX_C_SOURCE 200809L #include <dirent.h> #include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> int main(void) { int fd = open(".", O_RDONLY); if (fd == -1) { perror("open"); return EXIT_FAILURE; } DIR * directory = fdopendir(fd); if (directory == NULL) { perror("fdopendir"); close(fd); return EXIT_FAILURE; } struct dirent * entry; while ((entry = readdir(directory)) != NULL) { puts(entry->d_name); } closedir(directory); /* Ferme aussi le descripteur fd. */ 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 :