Voglio scrivere un programma che controlli l’esistenza di una directory; se questa directory non esiste, crea la directory e un file di registro al suo interno, ma se la directory esiste già, crea semplicemente un nuovo file di registro in quella cartella.
Come lo farei in C con Linux?
Guarda le stat
per verificare se la directory esiste,
E mkdir
, per creare una directory.
#include #include #include struct stat st = {0}; if (stat("/some/directory", &st) == -1) { mkdir("/some/directory", 0700); }
Puoi vedere il manuale di queste funzioni con i comandi man 2 stat
e man 2 mkdir
.
Puoi usare mkdir:
$ man 2 mkdir
#include #include int result = mkdir("/home/me/test.txt", 0777);
Voglio scrivere un programma che (…) crei la directory e un file (…) al suo interno
perché questa è una domanda molto comune, ecco il codice per creare più livelli di directory e di chiamare fopen. Sto usando un’estensione di GNU per stampare il messaggio di errore con 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); }