Как использовать execv для команд, местоположение которых неизвестно? - PullRequest
4 голосов
/ 01 октября 2011

Скажем, я хочу порождать процесс и запускать execv для выполнения команды, подобной ls, вот как я это делаю:

char * const parm[] = { "/usr/bin/ls","-l" , NULL };
if ((pid = vfork()) == -1)
    perror("fork error");
else if (pid == 0)
{
    execv("/usr/bin/ls", parm);
}

Теперь вопрос в том, что здесь я жестко запрограммировалгде присутствует команда ls (/usr/bin/ls).Теперь предположим, что я не знаю, где присутствует конкретная команда, и хочу ее выполнить, как мне это сделать?Я знаю, что в обычной оболочке переменная PATH ищется для достижения того же, но в случае программы на C, использующей execv, как мне этого добиться?

1 Ответ

7 голосов
/ 01 октября 2011

Используйте execvp(3) вместо execv(3). execvp и execlp работают точно так же, как execv и execl соответственно, за исключением того, что они ищут переменную среды $PATH для исполняемого файла (подробности см. На странице man).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...