Crea una nuova directory in C
-
Usa la funzione
mkdir
per creare una nuova directory -
Usa la funzione
mkdirat
per creare una nuova directory
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);
}
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook