1

Стандартные библиотечные функции C getenv и setenv могут использоваться для доступа к переменным среды для процесса.

В Linux, есть документированный глобальный переменный environ который содержит строки среды значения переменных, так что можно в принципе использовать его напрямую , а не использовать getenv и setenv

Мои вопросы:

  1. Почему environ предоставляется и документируется программисту приложения, когда это кажется ненужным?

  2. Может ли какое-либо программное обеспечение сейчас или, скорее всего, будущее программное обеспечение использовать непосредственно в environ ?

1 ответ1

2
  1. Чтобы ответить на ваш второй вопрос первым,
    • Тривиально, программы env и printenv используют environ для отображения всей среды.
    • Большинство снарядов используют environ копировать каждую переменную окружения в экспортируемой переменной оболочки.  (Например, в bash такие команды, как set , export и declare (без аргументов), перечислят всю среду вместе с неэкспортированными переменными.)
    • Я не уверен точно, как они справляются с этим, но su и sudo передают очищенную копию окружения программам, которые они вызывают.  Они могут сделать это, перебирая окружение и решая, какие переменные пройти, какие пропустить, а какие изменить.
  2. Почему environ предоставляется и документируется программисту приложения?
    • Потому что некоторые программы нуждаются в этом (см. Выше).
    • Ядро должно каким-то образом передавать среду процессу (когда он запускается).  getenv и setenv (и некоторые другие) должны иметь доступ к среде.  Ядру сложно связаться с библиотечной подпрограммой, которая не активна (т. Е. Передать информацию в любую часть программы, кроме подпрограммы, которая вызывает ядро).  Это становится вдвойне трудным, учитывая, что, если вы используете статические библиотеки, getenv и setenv даже не будут связаны с вашим образом процесса, если программа их не вызывает.  Использование глобальной переменной - самое простое решение.
    • Почему дизайнеры / разработчики сделали это так?  Почему бы и нет?  Процесс владеет своей средой; с ним разрешено делать все, что угодно.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .