execl () não está executando um comando sem seu caminho absoluto

1

Eu tenho o programa C salvo em /usr/sbin/ . Este programa imprime "Hello World" a cada dois segundos. Eu posso chamar / executar este programa a partir de qualquer pasta.

Quando eu escrevo o programa C com system("a.out"); , ele está sendo executado de qualquer pasta, mas quando eu uso execl() eu preciso dar o caminho absoluto, execl("/usr/sbin/a.out", "a.out"); , caso contrário ele não está sendo executado. Por quê?

    
por user41965 25.09.2018 / 07:08

1 resposta

3

A função de biblioteca system() C usa sh para executar o comando fornecido. Ao fazer isso, ele faz uma pesquisa pelo executável nos diretórios em $PATH , a menos que o programa já esteja especificado com um caminho absoluto. A função de biblioteca execl() C não faz essa pesquisa.

Você deseja usar a família de funções exec para executar seu programa e, em seguida, usar execlp() , que faz uma pesquisa PATH .

Veja man execlp no seu sistema.

    
por 25.09.2018 / 11:25