Crear un nuevo directorio en C
-
Utilice la función
mkdir
para crear un nuevo directorio -
Utilice la función
mkdirat
para crear un nuevo directorio
Este artículo demostrará varios métodos sobre cómo crear un nuevo directorio en C.
Utilice la función mkdir
para crear un nuevo directorio
mkdir
es una función compatible con POSIX que se puede utilizar para crear un nuevo directorio. La función toma dos argumentos: el primero de los cuales es el puntero char
que apunta al nombre de la ruta del directorio recién creado, y el segundo argumento especifica los bits de permiso, que se indican mediante una máscara de bits y se pueden establecer mediante el constantes macro predefinidas.
En el siguiente ejemplo, declaramos una variable de cadena constante para pasar como un nombre de directorio y especificamos los bits del modo S_IRWXU
, lo que implica que el propietario tendrá permisos de lectura/escritura/ejecución en el directorio.
#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);
}
Aunque colocamos la llamada mkdir
en un código de una sola línea en el ejemplo anterior, es importante implementar rutinas de verificación de errores cuando se trabaja con el código de nivel de producción. Al principio, debemos verificar que se crea un nuevo directorio y que las secciones posteriores del código se pueden ejecutar con éxito si dependen del directorio dado. Tenga en cuenta que mkdir
devuelve -1
cuando se produce el error y establece errno
en consecuencia. En este caso, implementamos una declaración switch
para verificar algunos códigos de error e imprimir los mensajes correspondientes en la consola.
#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);
}
Utilice la función mkdirat
para crear un nuevo directorio
mkdirat
es otra llamada al sistema que opera de manera similar, excepto que toma tres argumentos. El primero es el descriptor del archivo de directorio que se puede recuperar con la llamada al sistema dirfd
. Tenga en cuenta que este descriptor de archivo se utiliza cuando el nombre de ruta especificado como segundo argumento es relativo. En ese caso, la ruta se interpreta en relación con el directorio dado en lugar del directorio de trabajo actual.
mkdirat
tiene los mismos valores de tipo de retorno que los valores de mkdir
y los valores de errno
se pueden comprobar en consecuencia (consulte la lista completa en esta página). El siguiente código de ejemplo intenta crear un nuevo directorio en el directorio anterior al actual.
#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