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é

Fonction fdopendir (POSIX)

Entête à inclure

#include <dirent.h>

Fonction fdopendir

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.

Paramètres

Valeur de retour

En cas de succès, la fonction renvoie un pointeur de type DIR *. En cas d'erreur, elle renvoie NULL et positionne errno.

Si 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.

Exemple de code

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;
}
Création d'un flux à partir d'un descripteur

Sujets connexes

closedir
dirfd
DIR *
opendir
readdir
<unistd.h>


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