Executando um comando de C ++, o que é esperado no argv [0]?
-
23-09-2019 - |
Pergunta
estou usando execv()
Para executar comandos de / bin / como 'ls', 'pwd', 'echo' do meu programa C ++, e estou me perguntando que valor devo fornecer no argv [0];
const char * path = getPath();
char ** argv = getArgs();
execv(path,argv);
Solução
argv[0]
É suposto ser o nome do programa. Passou para o programa main
função. Alguns programas diferenciam seu comportamento, dependendo da string argv[0]
é. Por exemplo, o GNU bash
Shell desativará alguns de seus recursos se chamados usando sh
ao invés de bash
. Melhor dar o mesmo valor para o qual você passa path
.
Em Linux, argv[0]
é o nome do processo exibido pelo top
utilidade (que provavelmente recebe de leitura de entradas em /proc/
)
Outras dicas
Argv [0] deve ser o caminho completo do comando que você deseja executar.
Eu sei que essa não é a resposta que você está procurando, mas há uma razão específica para que você está fazendo isso? A razão pela qual peço é que a maioria, se não todas as ações, as pessoas normalmente correm com qualquer system()
ou execv()
estão disponíveis em bibliotecas no Windows ou Unix e são mais seguras, mais rápidas e menos propensas a sofrer de circunstancial erros. Com isso, quero dizer, por exemplo, quando o PATH
muda e de repente seu código para de funcionar.
Se você estiver passando em uma string, no todo ou em parte, e executando -a, também se deixa aberto a um usuário obtendo acesso ao sistema, digitando um comando que pode ser prejudicial. Por exemplo, imagine que você implementou uma pesquisa de arquivos usando find /home -name
e seus tipos de usuário em:
"%" -exec rm {} \;
Ai!