putenv
добавляет переменную среды в текущую среду. Использование execl
будет использовать эту среду.
execle
будет использовать аргумент среды в качестве всей среды, т. Е. Он не будет наследовать существующие переменные среды.
Это легко увидеть с помощью простой программы, которая просто запускает env
(которая выводит текущую среду):
#include <unistd.h>
int main()
{
execl("/bin/env", "/bin/env", NULL);
}
При запуске этого на моих машинах выводятся многие переменные окружения, такие как HOME
и т. Д.
#include <unistd.h>
int main()
{
char* env[] = { NULL };
execle("/bin/env", "/bin/env", NULL, env);
}
Это ничего не печатает, потому что среда пуста.