web-dev-qa-db-fra.com

Création d'un nouveau répertoire en C

Je veux écrire un programme qui vérifie l'existence d'un répertoire; si ce répertoire n'existe pas, il crée le répertoire et un fichier journal à l'intérieur de celui-ci, mais si le répertoire existe déjà, il crée simplement un nouveau fichier journal dans ce dossier.

Comment ferais-je cela en C avec Linux?

80
Jeegar Patel

Regardez stat pour vérifier si le répertoire existe,

Et mkdir , pour créer un répertoire.

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>

struct stat st = {0};

if (stat("/some/directory", &st) == -1) {
    mkdir("/some/directory", 0700);
}

Vous pouvez voir le manuel de ces fonctions avec le man 2 stat et man 2 mkdir commandes.

125
Arnaud Le Blanc

Vous pouvez utiliser mkdir:

$ man 2 mkdir

 #include <sys/stat.h>
 #include <sys/types.h>

 int result = mkdir("/home/me/test.txt", 0777);
20
Paul R

Je veux écrire un programme qui (...) crée le répertoire et un fichier (...) à l'intérieur de celui-ci

comme il s’agit d’une question très courante, voici le code permettant de créer plusieurs niveaux de répertoires et d’appeler fopen. J'utilise une extension gnu pour imprimer le message d'erreur avec printf.

void rek_mkdir(char *path)
{
  char *sep = strrchr(path, '/' );
  if(sep != NULL) {
    *sep = 0;
    rek_mkdir(path);
    *sep = '/';
  }
  if( mkdir(path,0777) && errno != EEXIST )
    printf("error while trying to create '%s'\n%m\n",path ); 
}


FILE *fopen_mkdir( char *path, char *mode )
{
    char *sep = strrchr(path, '/' );
    if(sep ) { 
       char *path0 = strdup(path);
       path0[ sep - path ] = 0;
       rek_mkdir(path0);
       free(path0);
    } 
    return fopen(path,mode);
}
3
Jens Harms