Книга: Linux программирование в примерах
2.4.2. Окружение в целом: environ
2.4.2. Окружение в целом: environ
Правильным способом работы с окружением является использование функций, описанных в предыдущем разделе. Однако, стоит взглянуть на то, как это работает «под капотом».
Внешняя переменная environ
предоставляет доступ таким же способом, как argv
предоставляет доступ к аргументам командной строки. Вы сами должны объявить переменную. Хотя она и стандартизирована POSIX, environ
намеренно не объявлена ни в одном стандартном заголовочном файле (Это, кажется, прослеживается из исторической практики.) Вот объявление:
extern char **environ; /* Смотрите, нет заголовочного файла POSIX */
Как и в argv
, завершающим элементом environ
является NULL
. Однако, здесь нет переменной «числа строк окружения», которая соответствовала бы argc
. Следующая простая программа распечатывает все окружение:
/* ch02-printenv.c --- Распечатать окружение. */
#include <stdio.h>
extern char **environ;
int main(int argc, char **argv) {
int i;
if (environ != NULL)
for (i = 0; environ[i] != NULL; i++)
printf("%sn", environ[i]);
return 0;
}
Хотя это и маловероятно, перед попыткой использовать environ
эта программа проверяет, что она не равна NULL
.
Переменные хранятся в окружении в случайном порядке. Хотя некоторые оболочки Unix хранят переменные окружения в отсортированном по именам переменных виде, это формально не требуется, и многие оболочки не сортируют их.
В качестве уловки реализации можно получить доступ к окружению, объявив третий параметр main()
:
int main(int argc, char **argv, char **envp) {
...
}
Затем можно использовать envp
также, как environ
. Хотя это иногда можно увидеть в старом коде, мы не рекомендуем такое использование; environ
является официальным, стандартным, переносимым способом получения доступа ко всему окружению, если это вам необходимо.
- Не вижу значка Сетевое окружение, как его вернуть?
- 9.1. Окружение процесса
- The GNOME Desktop Environment
- KDE — The Other Environment
- Using Environment Variables
- Chapter 12. Embedded Development Environment
- 2.3.8. Cross-Development Environment
- 12.1. Cross-Development Environment
- Картина в целом
- 5.1.5 Integrated Development Environments (IDEs)
- 5.3 mikroC Integrated Development Environment (IDE)
- Листинг 7.4. (print-environment.c) Отображение переменных среды процесса