Função de CHDR na linguagem C

Função de CHDR na linguagem C
A configuração de um diretório de trabalho a partir do diretório raiz do Linux abre a possibilidade de acessar e trabalhar em toda a estrutura do arquivo nas várias pastas do sistema e do usuário.

Nisso Linux Dica Artigo, você aprenderá como configurar um diretório de trabalho usando o chdir () função.

Explicaremos o funcionamento teórico dessa função, sua sintaxe, os tipos de argumentos de entrada e saída e o tipo de dados que cada um desses argumentos leva. Então, veremos uma descrição de como o chdir () obras e os cabeçalhos necessários para usar esta função.

Para usar essa função na prática, aplicaremos tudo o que aprendemos em um exemplo prático, onde você aprende o processo passo a passo sobre como usar essa função para definir um diretório de trabalho.

Sintaxe da função Chdir () na linguagem C

int chdir (const char* caminho)

Descrição da função chdir () na linguagem C

A função chdir () define o diretório de trabalho para a pasta especificada no caminho absoluto que é passado na string de argumento de entrada. Esta função aceita uma string pura ou um ponteiro do tipo de char para uma string que contém o caminho do diretório selecionado. Para levar o diretório atual ao nível UP, precisamos enviar a string "..." como um argumento de entrada para chdir (). Para consultar o caminho, use a função getcwd ().

O argumento de saída desta função é do tipo int. Se a seleção do diretório de trabalho for bem -sucedida, o chdir () retornará 0 como resultado. Caso contrário, se ocorrer um erro, o resultado será -1.

Quando trabalhamos com essa função, fazemos isso diretamente na estrutura de arquivos do sistema operacional. Essa estrutura pode variar em diferentes versões do sistema operacional e pode apontar para diretórios que não existem ou têm um nome diferente. Portanto, o uso desta função pode desencadear os diferentes tipos de erros.

A função chdir () retorna -1 se ocorrer um erro durante a execução. No entanto, essas informações não são suficientes para identificar o erro e fornecer uma solução em tempo real ou uma mensagem ao usuário, informando sobre a exceção. No entanto, todos os erros possíveis que essa função pode lançar são predefinidos no “errno.H ”cabeçalho. Veremos mais adiante uma seção especial para identificar os erros predefinidos.

A função chdir () é definida no “unistd.H ”cabeçalho. Para usá -lo, precisamos incluí -lo em nosso “.Arquivo C ”da seguinte maneira:

#incluir

Como definir o diretório de trabalho usando a função chdir () na linguagem C

Neste exemplo, explicamos como definir o diretório de trabalho do nosso código C. O primeiro passo é incluir o cabeçalho necessário, o “unistd.h ". Também incluímos o cabeçalho de entrada e saída, que é o “stdio.h ”como usamos a função printf () para exibir os resultados. Existem duas maneiras de definir o diretório com esta função. O primeiro diretório é uma string simples que enviamos como um argumento de entrada para chdir ().

Usamos a função getCWD () para recuperar o diretório criado. A corda retornada é armazenada no dir Array de caracteres que imprimimos () no shell para determinar se foi alterado corretamente.

No snippet a seguir, definimos a pasta "documentos" como o diretório de trabalho usando este modo:

#incluir
#incluir
void main ()

Char Dir [50];
chdir ("/home/linuxhint/documentos/");
printf ("\ n \ n O diretório selecionado é: %s \ n", getcwd (dir, 50));

Em seguida, vemos uma imagem com a compilação e execução deste código:

A segunda maneira é criar um buffer com os elementos do tipo de char com o caminho do diretório selecionado e chamar a função chdir () passando esse ponteiro de string como argumento de entrada.

#incluir
#incluir
void main ()

Char Dir [50];
Char Path [50] = "/home/linuxhint/documentos/";
chdir (caminho);
printf ("\ n \ n O diretório selecionado é: %s \ n", getcwd (dir, 50));

Em seguida, vemos uma imagem com a compilação e execução deste código:

Problemas e soluções possíveis ao usar a função chdir () na linguagem C

Um dos problemas mais comuns ao usar a função chdir () é que essa função usa o caminho absoluto do diretório que queremos selecionar em seu argumento de entrada.

Quando trabalhamos com arquivos e caminhos na programação, geralmente o fazemos com funções como fopen () ou similar. Os caminhos especificados como argumentos de entrada nessas funções não precisam conter o diretório raiz, pois eles levam a "casa" do usuário logado como ponto de partida.

Ao contrário dessas funções, o chdir () é uma função do sistema. Isso significa que ele usa os caminhos absolutos. Se o diretório inicial do Linux (/) não for especificado como o início do caminho, essa função não entrará em vigor. Aqui está o procedimento correto para selecionar o diretório "documentos" em um caminho absoluto:

Home/documentos incorretos
/Home/documentos corretos

O código a seguir executa a seleção do diretório "documentos" com duas chamadas para chdir (). O primeiro código está sem o diretório raiz (/) e o segundo código é com o diretório raiz (/). Após cada chamada, ele consulta o diretório atual com getcwd () e o exibe no console de comando.

#incluir
#incluir
void main ()

char name_ptr [100];
// sem diretório raiz
chdir ("home/linuxhint/documentos/");
printf ("no diretório sem raiz: %s", getcwd (name_ptr, 100));
// com diretório raiz
chdir ("/home/linuxhint/documentos/");
printf ("com diretório raiz: %s \ n", getcwd (name_ptr, 100));

É muito importante levar isso em consideração ao compartilhar com diferentes funções, cadeias ou fragmentos que contêm os caminhos ou diretórios de arquivo, pois, como podemos ver, algumas funções entram em vigor quando o diretório raiz não está incluído, como o FOPEN () enquanto outros como chdir () não.

Na imagem a seguir, vemos o código anterior que é compilado e executado e mostra o efeito dessa função com e sem o diretório raiz em seu caminho de entrada.

Como recuperar e identificar as exceções que podem ser geradas usando o chdir () com a ajuda das variáveis ​​ERRNO e os erros padrão no errno.H cabeçalho

Esta seção explica brevemente como identificar os possíveis erros gerados usando a função chdir () através das mensagens de erro predefinidas no errno.h cabeçalho.

O “errno.H ”o cabeçalho define os códigos de erro e é usado para identificá -los quando um programa é executado. Uma variável do tipo inteiro denominada "errno" é definida nele, que armazena um valor predefinido que representa um erro específico toda vez que ocorre uma exceção durante a execução. A seguir, você pode ver um fragmento original da “errno-base.h ”cabeçalho que está incluído no“ errno.H ”e em que os erros mais comuns são definidos:

#Define EPERM 1 / * Operação não permitida * /
#Define noent 2 / * não esse arquivo ou diretório * /
#Define ESRCH 3 / * Nenhum processo * /
#Define EINTR 4 / * SISTEMA INTERRUPTO CALL * /
#Define EIO 5/ * Erro de E/S */
#Define Enxio 6 / * Nenhuma dispositivo ou endereço * /
#Define e2big 7 / * Lista de argumentos muito tempo * /
#Define ENOEXEC 8 / * Erro de formato EXEC * /
#Define EBADF 9 / * Número de arquivo ruim * /
#Define ECHILD 10 / * SEM processos filhos * /
#Define Eagin 11 / * tente novamente * /
#Define Enomem 12 / * fora da memória * /
#Define Eacces 13 / * Permissão negada * /
#Define Efault 14 / * Endereço ruim * /
#Define ENOTBLK 15 / * Block Dispositivo necessário * /
#Define Ebusy 16 / * dispositivo ou recurso ocupado * /
#Define Eexist 17 / * O arquivo existe * /
#Define Exdev 18 / * Link de Device Cross * /
#define enodev 19 / * não esse dispositivo * /
#Define enotdir 20 / * não é um diretório * /
#Define Eisdir 21 / * é um diretório * /
#Define einval 22 / * argumento inválido * /
#Define Enfile 23 / * Tabela de arquivos Overflow * /
#Define Emfile 24 / * Muitos arquivos abertos * /
#Define ENOTTY 25 / * Não é uma máquina de escrever * /
#Define ETXTBSY 26 / * Arquivo de texto ocupado * /
#Define Efbig 27 / * Arquivo muito grande * /
#Define enspc 28 / * Nenhum espaço deixado no dispositivo * /
#Define espipe 29 / * busca ilegal * /
#Define Erofs 30 / * Sistema de arquivos somente leitura * /
#Define emlink 31 / * muitos links * /
#define epipe 32 / * tubo quebrado * /
#Define Edom 33 / * Argumento de matemática fora do domínio do func * /
#Define Erange 34 / * Resultado de matemática não representável * /

Nos casos em que a função chdir () retorna -1, podemos identificar o erro usando a variável "errno". Dessa forma, damos um tratamento específico para resolver o erro ou uma mensagem para o usuário.

As variáveis ​​e os códigos de erro são definidos no “errno.H ”cabeçalho. Para usá -los, devemos incluí -los em nosso “.Arquivo C ”da seguinte maneira:

#incluir

Exemplo:

Neste exemplo, tentaremos definir o diretório de trabalho como uma pasta inexistente. Então, Chdir () retorna -1. Como sabemos que a função gera um erro, consultamos a variável "errno" em uma condição IF para identificar o erro. Nesse caso, é o Noent erro que indica que o arquivo ou diretório não é encontrado e é representado pelo número 2.

Usamos a função printf () para enviar uma mensagem ao usuário, informando que ocorreu um erro, o número do erro e seu significado. A seguir, o código deste exemplo:

#incluir
#incluir
#incluir
void main ()

em terror;
erro = chdir ("/home/linuxhint/docnts/");
if (erro == -1)
Printf ("\ n \ nan Erro ocorreu. Erro: %i \ n ", errno);
if (errno == enoent)
printf ("nenhum arquivo ou diretório \ n \ n");

Você pode experimentar os diferentes frutos indicando as pastas existentes e inexistentes para ver os resultados. A imagem a seguir mostra a compilação e execução deste código:

Conclusão

Neste abrangente Linux Dica Artigo, explicamos como usar a função chdir () para especificar um diretório de trabalho. Analisamos uma seção teórica sobre essa função e aplicamos o que aprendemos em um exemplo com trechos de código de imagem. Também mostramos alguns dos erros mais comuns ao usar o chdir () e como especificar o caminho de trabalho corretamente. Além disso, incluímos uma seção especial que ensina como detectar os vários erros com a variável "errno".

Esperamos que este artigo seja útil para você. Para obter mais artigos sobre as dicas de idioma C e Linux, use o mecanismo de pesquisa em nosso site.