LINUX.ORG.RU

История изменений

Исправление hateyoufeel, (текущая версия) :

А без char** environ не получится откуда-нибудь из библиотеки сделать нормальный fork()+exec().

Так это fork()+exec() не нужны. В Windows, собственно, fork() и нет.

Без глобального char **environ как раз отлично можно сделать posix_spawn() (или execvpe, что аналогично, но не в POSIX) и передать туда указатели на argv и envp.

P.S. Из буквоедства, ядро не передаёт в main() список env, это libc до вызова main() парсит аргумент программы после последнего (arcv[argc]), копирует в другую память, заносит значение в **environ и **envp. А ядро, как отображало этот кусок памяти, куда исходно сложило переменные среды, в /proc/PID/environ, так и отображет.

Это детали реализации конкретного ядра, на них вообще плевать.

Исходная версия hateyoufeel, :

А без char** environ не получится откуда-нибудь из библиотеки сделать нормальный fork()+exec().

Так это fork()+exec() не нужны. В Windows, собственно, fork() и нет.

Без глобального char **environ как раз отлично можно сделать posix_spawn() (или execvpe, что аналогично, но не в POSIX) и передать туда указатели на argv и envp.