Crie um novo diretório em C
Este artigo demonstrará vários métodos sobre como criar um novo diretório em C.
Use a função mkdir
para criar um novo diretório
mkdir
é uma função compatível com POSIX que pode ser usada para criar um novo diretório. A função leva dois argumentos - o primeiro dos quais é o ponteiro char
apontando para o nome do caminho do diretório recém-criado, e o segundo argumento especifica os bits de permissão, que são denotados por uma máscara de bits e podem ser definidos usando o constantes macro predefinidas.
No exemplo a seguir, declaramos uma variável de string constante a ser passada como um nome de diretório e especificamos os bits de modo S_IRWXU
, o que implica que o proprietário terá permissões de leitura / gravação / execução no diretório.
#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);
}
Embora tenhamos colocado a chamada mkdir
em um código de linha única no exemplo anterior, é importante implementar rotinas de verificação de erros ao trabalhar com o código de nível de produção. Primeiramente, devemos verificar se um novo diretório é criado e as seções posteriores do código podem ser executadas com sucesso se dependerem do diretório fornecido. Observe que mkdir
retorna -1
quando o erro ocorre e define errno
de acordo. Neste caso, implementamos uma instrução switch
para verificar alguns códigos de erro e imprimir as mensagens correspondentes no 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);
}
Use a função mkdirat
para criar um novo diretório
mkdirat
é outra chamada de sistema que opera de forma semelhante, exceto que leva três argumentos. O primeiro é o descritor do arquivo do diretório que pode ser recuperado com a chamada do sistema dirfd
. Observe que este descritor de arquivo é usado quando o nome do caminho especificado como o segundo argumento é um relativo. Nesse caso, o caminho é interpretado em relação ao diretório fornecido em vez do diretório de trabalho atual.
mkdirat
tem os mesmos valores de tipo de retorno que os valores mkdir
e errno
podem ser verificados de acordo (veja a lista completa nesta página). O código de exemplo a seguir tenta criar um novo diretório do diretório anterior para o atual.
#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