Все exec*
библиотечные функции в конечном итоге являются удобными обертками для системного вызова execve()
.Просто используйте тот, который вам удобнее.
Те, которые заканчиваются на p
(execlp()
, execvp()
), используют переменную окружения $PATH
, чтобы найти программу для запуска.Для остальных вам необходимо использовать полный путь в качестве первого аргумента.
Те, которые заканчиваются на e
(execle()
, execve()
), позволяют вам определить среду (используя последний аргумент).Таким образом вы избежите потенциальных проблем с $PATH
, $IFS
и другими опасными переменными среды.
Те, которые имеют v
в его имени, принимают массив для указания аргументов для запуска программы, в то время какте, которые l
принимают аргументы программы для запуска в качестве переменных-аргументов, заканчивающиеся (char *)NULL
.Например, execle()
очень удобно для создания фиксированного вызова, в то время как execv*
допускает ряд аргументов, которые изменяются программно.