Função GetCWD na linguagem C

Função GetCWD na linguagem C

Configurando um diretório de trabalho a partir do diretório raiz do Linux abre a possibilidade de acessar e trabalhar com toda a estrutura do arquivo nas várias pastas do sistema e do usuário.

A linguagem C fornece a função chdir () para configurar um diretório de trabalho e também tem uma função para consultar o diretório em que você está trabalhando.

Neste artigo do Linux Dint, você aprenderá a usar a função getCWD () para consultar o diretório em que está trabalhando atualmente. Explicaremos o funcionamento teórico dessa função, sua sintaxe, os tipos de seus argumentos de entrada e saída e cada tipo de dados.

Para usar essa função de maneira prática, aplicaremos tudo o que aprendemos através de um exemplo prático em que você aprende passo a passo sobre como usar essa função para recuperar o diretório de trabalho atual.

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

char *getcwd (char *buf, tamanho_t size);

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

A função getcwd () consulta o diretório de trabalho atual do programa de chamada ou processo. Esta função retorna o ponteiro para um conjunto de caracteres "buf of size", que contém uma string com o caminho absoluto do diretório de trabalho atual.

Se a chamada para a função getcwd () for bem -sucedida, ela retornará o ponteiro para a string com o caminho do diretório de trabalho. Se ocorrer um erro, o resultado é um ponteiro nulo. Nesse caso, o código de identificação de erros é armazenado automaticamente na variável Global Errno.

Tanto a declaração da variável errno quanto as definições dos códigos de erro estão no “errno.H ”cabeçalho. No exemplo a seguir, veremos uma seção especial que explica como detectar e identificar os erros.

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

#incluir

Como consultar o diretório de trabalho atual com a função getCWD () na linguagem C

Neste exemplo, explicaremos como recuperar o diretório de trabalho atual e exibi -lo no console de comando.

O primeiro passo para fazer isso é incluir os cabeçalhos necessários. Nesse caso, eles são os “unistd.h "e" stdio.arquivos h ”. Em seguida, abrimos uma função principal () que retorna um valor de retorno vazio e no qual declaramos um caminho de matriz com 128 elementos do tipo char. Nesta matriz, a função getcwd () armazena a string com o diretório.

Depois que as variáveis ​​necessárias forem declaradas, chamamos a função getcwd (). Passamos o argumento de entrada "BUF" como o ponteiro para o caminho da matriz e o tamanho do buffer como tamanho do argumento, como 128 neste caso.

Em seguida, usando a função printf (), imprimimos o “O diretório real é:” Mensagem seguida pelo caminho do diretório que é retornado pela função getcwd (). Aqui está o código completo para este exemplo:

#incluir
#incluir
void main ()

CHAR CATH [128];
getcwd (caminho, 128);
printf ("\ n \ n O diretório real é: %s \ n", caminho);

Em seguida, vemos uma imagem com a compilação e execução deste código. Nesse caso, o getCWD () retorna o caminho absoluto do diretório inicial do usuário em sessão:

O mesmo ponteiro que GetCWD () retorna no argumento "BUF" retorna o seguinte resultado:

ponteiro para buff = getcwd (ponteiro para buff, tamanho);

Isso permite que a função getcwd () seja chamada dos argumentos de entrada de outra função. O código a seguir mostra a chamada dos argumentos de entrada de printf ():

#incluir
#incluir
void main ()

CHAR CATH [128];
printf ("\ n \ nO diretório real é: %s \ n", getcwd (caminho, 128));

Nesse caso, o printf () leva o ponteiro para a string que é retornada pelo getcwd () e a imprime no console de comando com apenas uma linha de código.

A imagem a seguir mostra que esse método tem o mesmo efeito que o programa no exemplo anterior:

Erros ao usar a função getCWD (): como detectá -los e identificá -los

Se ocorrer um erro ao chamar a função getcwd (), ele retorna um ponteiro nulo como resultado. A maneira mais fácil de detectar um erro é usar uma condição "se" onde a condição de entrada é determinada por um resultado que é igual a nulo. A seguir, é apresentado um trecho de código que usa esse método para detecção de erros:

if (getcwd (caminho, 128) == null)

printf ("Ocorreu um erro na chamada de função getcwd ().\ n ");

Quando ocorre um erro, um código numérico que o identifica é automaticamente armazenado na variável Global Errno, que é declarada no “errno.H ”cabeçalho.

Este cabeçalho também define os códigos de erro e sua representação numérica.

Você pode ver os erros que a função getCWD () pode gerar, sua representação numérica que é retornada na variável ERRNO e uma breve descrição de cada uma:

Definição Valor em errno Descrição
Enoent 2 Não existe tal arquivo ou diretório.
Eacces 13 Permissão negada
Efault 14 Endereço ruim.
Einval 22 Argumento inválido.
Enametoolong 36 Nome do arquivo ou caminho muito tempo.

A maneira mais fácil de identificar um erro é abrir uma chave condicional onde a condição de salto é a variável Global Errno e cada caso é uma definição de erro. Vemos o código para este método de detecção a seguir:

if (getcwd (caminho, 128) == null)

switch (errno)
Caso Einval:
printf ("argumento inválido.\ n ");
quebrar;
case efault:
printf ("Endereço ruim.\ n ");
quebrar;
case enoent:
printf ("Não esse arquivo ou diretório.\ n ");
quebrar;

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

Conclusão

Neste artigo do Linux, explicamos como usar a função getCWD () para determinar o diretório de trabalho atual do programa de chamada.

Vimos uma seção teórica sobre essa função, quais são seus argumentos de entrada e saída e que tipo de dados ele usa. Em seguida, aplicamos o que aprendemos através dos exemplos práticos com imagens e trechos de código que mostram como declarar as variáveis ​​necessárias e chamar a função getcwd ().

Também incluímos uma seção especial onde listamos os diferentes erros que essa função pode gerar e explicamos como detectá -los.