#c #linux #system-calls
Вопрос:
В основном вопрос заключается в названии. Я использую setenv()
функцию для установки переменной среды в своей программе cpp, где я также использую fork()
exec()
цепочку, которая создает дочерний процесс. Проблема в том, что созданная переменная также доступна из этого дочернего процесса. Это setenv()
эквивалентно export ABC=EFG
поведению в оболочке. Что я хочу, так это отделить эту функциональность. Я хочу отдельно установить переменную ABC=EFG
и сделать ее доступной для дочернего процесса export ABC
. Как это сделать?
РЕДАКТИРОВАТЬ: Я решил добавить свой комментарий к ответу @SergeyA здесь. Например, как bash обрабатывает переменные env в подобной ситуации? Если я напишу ABC=EFG и вызову скрипт, состоящий только из одной строки echo $ABC, он ничего не напечатает, если я ранее не вызвал export ABC. Я просто пишу оболочку и пытаюсь подражать этому поведению.
Комментарии:
1. @Фрэнк добавил: спасибо за замечание.
2. Существует различие между обычными переменными оболочки и переменными среды. Оболочки предоставляют последние только процессам, которые они выполняют, с помощью одной из
exec*()
функций, которая принимает аргумент среды.
Ответ №1:
Прямого способа сделать это нет. Вызов exec
всегда приведет к тому, что дочерний процесс унаследует переменные среды родительского процесса.
Вы можете использовать exceve
для явного указания переменных среды, которые должны быть видны дочернему процессу.
Комментарии:
1. Но как, например, bash обрабатывает переменные env в подобной ситуации? Если я напишу
ABC=EFG
и вызову скрипт, состоящий только из одной строкиecho $ABC
, он ничего не напечатает, если я предварительно не позвонюexport ABC
. Я просто пишу оболочку и пытаюсь подражать этому поведению2. @sauce Я не видел его исходного кода, но я бы предположил, что он использует аналогичную технику.