HOWTO · C
Crea una nuova directory in C
Questo articolo introduce come creare una nuova directory in C
Questo articolo illustrerà più metodi su come creare una nuova directory in C.
Usa la funzione mkdir per creare una nuova directory
mkdir è una funzione conforme a POSIX che può essere utilizzata per creare una nuova directory. La funzione accetta due argomenti: il primo dei quali è il puntatore char che punta al percorso della directory appena creata, e il secondo argomento specifica i bit di autorizzazione, che sono indicati da una maschera di bit e possono essere impostati utilizzando il costanti macro predefinite.
Nell’esempio seguente, dichiariamo una variabile di stringa costante da passare come nome di directory e specifichiamo i bit di modalità S_IRWXU, il che implica che il proprietario avrà i permessi di lettura / scrittura / esecuzione sulla directory.
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
const char *name = "Arbitrary Directory";
int main(void) {
mkdir(name, S_IRWXU);
exit(EXIT_SUCCESS);
}
Anche se abbiamo inserito la chiamata mkdir in un codice a linea singola nell’esempio precedente, è importante implementare routine di controllo degli errori quando si lavora con il codice del livello di produzione. All’inizio, dovremmo controllare che sia stata creata una nuova directory e che le sezioni successive del codice possano essere eseguite correttamente se dipendono dalla directory data. Nota che mkdir restituisce -1 quando si verifica l’errore e imposta errno di conseguenza. In questo caso, abbiamo implementato un’istruzione switch per controllare alcuni codici di errore e stampare i messaggi corrispondenti sulla console.
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
const char *name = "Arbitrary Directory";
int main(void) {
errno = 0;
int ret = mkdir(name, S_IRWXU);
if (ret == -1) {
switch (errno) {
case EACCES:
printf("the parent directory does not allow write");
exit(EXIT_FAILURE);
case EEXIST:
printf("pathname already exists");
exit(EXIT_FAILURE);
case ENAMETOOLONG:
printf("pathname is too long");
exit(EXIT_FAILURE);
default:
perror("mkdir");
exit(EXIT_FAILURE);
}
}
exit(EXIT_SUCCESS);
}
Usa la funzione mkdirat per creare una nuova directory
mkdirat è un’altra chiamata di sistema che funziona in modo simile, tranne per il fatto che richiede tre argomenti. Il primo è il descrittore del file di directory che può essere recuperato con la chiamata di sistema dirfd. Notare che questo descrittore di file viene utilizzato quando il percorso specificato come secondo argomento è un relativo. In tal caso, il percorso viene interpretato in relazione alla directory data piuttosto che alla directory di lavoro corrente.
mkdirat ha gli stessi valori del tipo restituito dei valori mkdir e errno possono essere controllati di conseguenza (vedere l’lista completo in questa pagina). Il codice di esempio seguente tenta di creare una nuova directory nella directory precedente a quella corrente.
#include <dirent.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
const char *name = "Arbitrary Directory";
int main(void) {
DIR *dir = opendir("../");
int dfd = dirfd(dir);
errno = 0;
int ret = mkdirat(dfd, name, S_IRWXU);
if (ret == -1) {
switch (errno) {
case EACCES:
printf("the parent directory does not allow write");
exit(EXIT_FAILURE);
case EEXIST:
printf("pathname already exists");
exit(EXIT_FAILURE);
case ENAMETOOLONG:
printf("pathname is too long");
exit(EXIT_FAILURE);
default:
perror("mkdir");
exit(EXIT_FAILURE);
}
}
closedir(dir);
exit(EXIT_SUCCESS);
}