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);
Foi útil?

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!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top