ReadLink C função

ReadLink C função

A função readlink () da linguagem de programação C é usada para inserir as informações do link simbólico, que se refere a algum caminho, no buffer. Ler o conteúdo de um link simbólico é chamado de "ler um link" ou "readlink". O conteúdo restante do buffer é deixado indeterminado se a duração do link simbólico dos bytes for menor que o buffer_size. Neste artigo, discutiremos alguns exemplos para ilustrar o funcionamento da função ReadLink C no sistema Kali Linux. A sintaxe da função ReadLink é dada da seguinte forma:

A função readlink () é encontrada no arquivo de cabeçalho . Este arquivo de cabeçalho deve ser incluído acima da função principal no arquivo de código. O buffer não contém um caractere nulo após o resultado.

#incluir
  • ssize_t readlink (const char *restrito link_Nome do caminho, char *restringir amortecedor,
      • size_t tamanho do buffer);

O valor do link simbólico é reduzido para caber no buffer se for muito curto para segurá -lo na íntegra (buffer_size). Os bytes do tamanho do buffer inicial devem ser adicionados ao buffer, caso o argumento do buffer não seja grande o suficiente para manter o conteúdo do link. Se o tamanho do buffer for maior que o tamanho máximo, o resultado será definido pela implementação. O número de bytes carregados no buffer será devolvido se readlink () for executado com sucesso. Caso contrário, ele deve retornar -1 e definir errno para identificar o erro exato e deixar o buffer não modificado. Aqui está a lista de descrições de erros junto com o código:

  • Einval: Não há link simbólico no arquivo nomeado.
  • EIO: A leitura do sistema de arquivos resultou em um erro de entrada ou saída.
  • Eacces: Um elemento do prefixo do caminho não tem permissão de pesquisa.
  • Eloop: Nas ligações simbólicas, há um loop. Ao resolver o argumento do caminho, esse erro é levantado se mais do que os links simbólicos do Posix Symloop forem encontrados.
  • Enoent: Não existe um arquivo como o link nomeado.

Vamos avaliar a função readlink () em alguns exemplos. Crie um arquivo de programação C no terminal Linux usando o editor Vim. Você pode usar o Nano ou qualquer outro editor para criar o arquivo.

Todos os arquivos de cabeçalho estão incluídos no código abaixo antes da função principal. Na primeira linha do bloco principal, a estrutura "estatística" é declarada. Depois disso, um ponteiro do tipo de personagem é declarado, que mais tarde é usado na função readlink (). Estamos usando ssize_t em vez de um tipo de dados inteiro. É um tipo assinado. Seus valores máximos estão ligados a se o sistema operacional é de 32 bits ou 64 bits. Declaramos duas variáveis ​​desse tipo de dados: buffer_size e nbytes (número de bytes).

Na próxima linha de código, verificamos o número de argumentos fornecidos da linha de comando para a função principal. Se isso não for igual a 2, o programa sai da função principal usando a função de saída, que também exibe uma mensagem de erro. O local da memória mencionado pelo buffer é onde as informações de status de um determinado arquivo são armazenadas após serem obtidas pela função lStat (). Se o nome do arquivo for o link simbólico, essa função retorna os detalhes sobre o próprio link simbólico. As informações retornadas pela função LSTAT estão na forma de uma estrutura estatística, que é referenciada por um buffer.

Os dados de status de um determinado arquivo são coletados pela função lStat () e colocados no endereço de memória apontados pelo buffer. Este método fornece informações sobre o próprio link simbólico se o nome do arquivo for o link simbólico. Os dados que a função LSTAT retorna estão na forma de uma estrutura estatística. Aumentamos o tamanho do buffer em um.

Em alguns casos, o tamanho relatado é zero, devolvido pelo link simbólico. Nessa situação, defina o tamanho do buffer para o valor PATH_MAX. Defina o buffer usando alocação de memória, que usa o buffer_size. Verifique se o buffer é nulo, exibe uma mensagem de erro. Chame a função ReadLink e passe no caminho do link de leitura, buffer e buffer_size para esta função. A função retorna quantos bytes foram devolvidos no caminho. Se o número de bytes for -1, exiba o erro, senão exibir a localização do ponto do arquivo vinculado. Em seguida, liberte o buffer.

Compilar o arquivo C usando o compilador GCC. O readlink.o arquivo out contém o resultado do arquivo.

Na primeira execução, passa o nome do diretório, que não é o link simbólico, por isso dá um erro de que não existe esse arquivo ou diretório.

Abaixo, passamos pelo diretório raiz, que é um argumento inválido.

Agora que passamos o caminho, a função ReadLink retorna o nome do link simbólico para o qual está apontando.

Vamos usar um arquivo C para construir um arquivo e um link simbólico para ele. Criamos um nome de arquivo e um link simbólico na função principal. Crie o arquivo com o switch s iwuser usando a função Criar. Um novo link rígido pode ser feito para um arquivo existente usando o método de link () da biblioteca C (). Para construir um link suave, use o método symlink (). Não será substituído se o arquivo ou caminho já existir. Quando bem -sucedido, as funções link () e symlink () retornam 0.

Utilize o compilador GCC para compilar o código e salve os resultados no readlink1.arquivo out.

Execute o código. Aqui está a saída:

Conclusão:

Trata -se do uso da função readlink () de C dentro de alguns dos exemplos implementados no sistema Kali Linux. Elaboramos seu uso, sua sintaxe e os erros que ele contém em alguns dos exemplos para serem mais específicos e mais claros.