История изменений
Исправление 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.