“obtendo” caminho no Linux
-
09-06-2019 - |
Pergunta
Estou escrevendo um programa C no Linux.Comandos como execv() requerem um caminho na forma de uma string C.Existe um comando que retornará o caminho atual na forma de uma string estilo c?
Solução
SINOPSE
#include <unistd.h> char *getcwd(char *buf, size_t size);
DESCRIÇÃO
O getcwd() A função deve colocar um nome de caminho absoluto do diretório de trabalho atual na matriz apontada por buf, e retornar buf.O nome do caminho copiado para o array não deve conter componentes que sejam links simbólicos.O tamanho argumento é o tamanho em bytes da matriz de caracteres apontada pelo bufante argumento.Se bufante é um ponteiro nulo, o comportamento de getcwd() não é especificado.
VALOR DE RETORNO
Após a conclusão bem-sucedida, getcwd() devolverá o bufante argumento.De outra forma, getcwd() deve retornar um ponteiro nulo e definir errno para indicar o erro.O conteúdo do array apontado por bufante são então indefinidos ....
Outras dicas
O caminho argumento para execv() é o caminho para o aplicativo que você deseja executar, não o diretório de trabalho atual (que será retornado por getcwd()) ou o caminho de pesquisa do shell (que será retornado por getenv("PATH")).
Dependendo do que você está fazendo, você pode aproveitar mais a função system() na biblioteca C do que a família exec() de nível inferior.
Isso é não ANSI C:
#include <unistd.h>
char path[MAXPATHLEN];
getcwd(path, MAXPATHLEN);
printf("pwd -> %s\n", path);
Se o caminho puder ser um caminho relativo, você poderá usar '.' ou './' como o caminho.Não tenho certeza se funcionará, mas você pode tentar.
Não sou um programador profissional, então esta não é uma resposta exata.
O que você precisa fazer é pegar a variável de ambiente PWD (atual diretório de trabalho)
Não tenho certeza de qual biblioteca está, mas é um cabeçalho padrão do Linux.
Vou dar uma olhada e ver se consigo encontrar.
editar:
Eu estava pensando,getenv() o que ajudaria se você também precisasse executar comandos do sistema e precisar dos vários caminhos de bin localizados em PATH