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 readdir_r (POSIX)

Entête à inclure

#include <dirent.h>

Fonction readdir_r

int readdir_r( DIR * restrict dirp, struct dirent * restrict entry, struct dirent ** restrict result );

La fonction readdir_r est une variante historique de readdir dans laquelle l'appelant fournit lui-même le buffer de destination. Elle est documentée ici car elle fait partie de POSIX.1-2017.

Paramètres

Valeur de retour

La fonction renvoie 0 en cas de succès ou en fin de dossier. En cas d'erreur, elle renvoie directement un code erreur.

Dans du code moderne, ne faites pas de readdir_r votre premier choix. Le dimensionnement portable du buffer est délicat, et l'usage de readdir avec des flux de dossier séparés est généralement plus simple.

Exemple de code

Le fragment suivant montre l'approche recommandée dans la plupart des nouveaux programmes : utiliser readdir et traiter proprement errno.

 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 <errno.h>
#include <stdio.h>
#include <stdlib.h>

int main(void) {

    DIR * directory = opendir(".");
    if (directory == NULL) {
        perror("opendir");
        return EXIT_FAILURE;
    }

    errno = 0;
    struct dirent * entry;

    while ((entry = readdir(directory)) != NULL) {
        puts(entry->d_name);
    }

    if (errno != 0) {
        perror("readdir");
        closedir(directory);
        return EXIT_FAILURE;
    }

    closedir(directory);
    return EXIT_SUCCESS;
}
Alternative moderne à readdir_r

Sujets connexes

closedir
DIR *
opendir
readdir
struct dirent


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