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 :

Fonction rmdir - Entête <unistd.h>

#include <unistd.h>

Fonction rmdir

int rmdir( const char * path );

Cette fonction permet de supprimer le dossier spécifié en paramètre (rmdir = ReMove DIRectory).

le dossier à supprimer doit impérativement être vide pour être effectivement supprimé. Si le dossier contient au moins un fichier ou un sous-dossier, la fonction rmdir renverra une erreur (variable errno fixée à ENOTEMPTY).

Paramètre

Valeur de retour

Si tout se passe bien, la fonction renvoie 0. Dans le cas contraire, la valeur -1 vous sera retournée et la variable errno sera fixée avec le code erreur constaté.

Codes erreurs pouvant être retournés

Exemple de code

L'exemple de code suivant permet de créer un dossier test puis tente de le supprimer : deux essais seront nécessaires. Effectivement, pendant quelques instants, un fichier est crée dans le dossier, empêchant ainsi sa suppression.

 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 
 32 
 33 
 34 
 35 
 36 
 37 
 38 
 39 
 40 
 41 
 42 
 43 
 44 
#include <errno.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>

#include <unistd.h>        // rmdir
#include <sys/stat.h>      // mkdir

#define DIRECTORY "test"
#define FILENAME "test/essai.txt"

int main() {

    if ( mkdir( DIRECTORY, 0755 ) != 0 ) {
        fprintf( stderr, "Impossible de créer le dossier %s.\n", DIRECTORY );
        exit( EXIT_FAILURE );
    }
    printf( "Création du dossier %s effectuée!\n", DIRECTORY );
    
    FILE * file = fopen( FILENAME, "w" );
    if ( file == NULL ) {
        fprintf( stderr, "Impossible d'ouvrir le fichier en écriture.\n" );
        exit( EXIT_FAILURE );
    }
    fprintf( file, "Ok" );
    fclose(file);


    while( true ) {
        if ( rmdir( DIRECTORY ) == 0 ) {
            printf( "Dossier %s supprimé!\n", DIRECTORY );
            break;
        } else if ( errno == ENOTEMPTY ) {
            printf( "Ouups, on a oublié le fichier %s!\n", FILENAME );
            remove( FILENAME );
        } else {
            fprintf( stderr, "Erreur inconnue rencontrée lors de la suppression du dossier %s\n", DIRECTORY );
        }
    }

    printf( "Bye bye\n" );    
    
    return EXIT_SUCCESS;
}
Exemple d'utilisation de la fonction rmdir

Et voici les résultats produits par cet exemple de code.

$> gcc -o sample sample.c
$> ./sample
Création du dossier test effectuée!
Ouups, on a oublié le fichier test/essai.txt!
Dossier test supprimé!
Bye bye
$>

Conformité

POSIX 88 (IEEE Std 1003.1-1988) et versions ultérieures.

Sujets connexes