Многозадачное программирование в Linux на языке C (статья 16). Переменные окружения

11 January
<100 full reads
50 sec.
188 story viewsUnique page visitors
<100 read the story to the endThat's 53% of the total page views
50 seconds — average reading time

И снова на канале Old Programmer разговор о программировании в Linux. Тематическое оглавление канала здесь. А тут собраны все ссылки по C/C++. Здесь перечень ссылок на ресурсы моего канала, посвященные многозадачности в Linux.

Что такое окружение (environment)

Сегодня еще один способ передачи данных запускаемому процессу. Это окружение или environment. Если в консоли набрать команду env, то будет выведено множество строк вида ИМЯ=ЗНАЧЕНИЕ. Это и есть окружение. Это окружение вы получаете, когда входите в систему под некоторым именем. Другими словами окружение состоит из переменных и их значений. Программы, которые вы запускаете от своего имени наследуют эти строки. Если программа запускает некоторый дочерний процесс, то этот процесс наследует и окружение родительского. Но программа может менять свое окружение, добавляя строки с новыми переменными или меняя уже существующие переменные. Таким образом можно передавать дочернему процессу нужную информацию.

Управление окружением

Для проверки сказанного имеем две программы (env4000.c и env4010.c). Первая добавляет в окружение новую переменную и запускает дочерний процесс. Дочерний процесс извлекает эту переменную и выводит ее на консоль. Для изменения окружения используется функция setenv(). Первый параметр функции - имя переменной, второй параметр - значение переменной. Третий параметр определяет то, как относится к тому факту, если эта переменная уже есть в окружении. Если этот параметр отличен от нуля, то в случае наличия в окружении такой переменной, ее значение заменяется. Если же этот параметр равен нулю, то изменение в окружении производится только если такой переменной в окружении нет. При успешной работе функции она возвращает ноль.

Для получения значения переменной окружения в дочернем процессе используется функция getenv(). Единственным параметром ее является имя переменной. Функция возвращает указатель на значение переменной (строку), либо NULL, если переменная не найдена.

Не забывайте подписываться на мой канал о программировании и программистах Old Programmer и ставить 'like'.

Программа env4000.c
Программа env4000.c