Программирование для Linux. Профессиональный подход | страница 22
Некоторые переменные должны быть знакомы большинству читателей, например:
■ >USER
— содержит имя текущего пользователя;
■ >HOME
— содержит путь к начальному каталогу текущего пользователя;
■ >PATH
— содержит разделенный двоеточиями список каталогов, которые операционная система просматривает в поиске вызванной программы;
■ >DISPLAY
— содержит имя и номер экрана сервера X Window, на котором отображаются окна графических программ.
Интерпретатор команд, как и любая другая программа, располагает своей средой. Имеются средства просмотра и редактирования переменных среды из командной строки. Например, программа >printenv
отображает текущую среду интерпретатора. В разных интерпретаторах есть свой встроенный синтаксис работы с переменными среды. Ниже демонстрируется синтаксис интерпретаторов семейства Bourne shell.
■ Интерпретатор автоматически создает локальную переменную (называемую переменной интерпретатора) для каждой обнаруживаемой им переменной среды. Благодаря этому возможен доступ к переменным среды через выражения вида >$переменная
. Например:
>% echo $USER
>samuel
>% echo $HOME
>/home/samuel
■ С помощью команды >export
можно экспортировать переменную интерпретатора в переменную среды. Вот как, например, задается значение переменной >EDITOR
:
>% EDITOR=emacs
>% export EDITOR
Или короче:
>% export EDITOR=emacs
В программе доступ к переменным среды осуществляет функция >getenv()
, объявленная в файле >
. В качестве аргумента она принимает имя переменной и возвращает се значение в строковом виде или >NULL
, если переменная не определена в данной среде. Для установки и сброса значений переменных среды предназначены функции >setenv()
и >unsetenv()
соответственно.
Получить список всех переменных среды немного сложнее. Для этого нужно обратиться к специальной глобальной переменной >environ
, определенной в GNU-библиотеке языка С. Данная переменная имеет тип >char**
и представляет собой массив указателей на символьные строки, последним элементом которого является >NULL
. Каждая строка имеет вид >ПЕРЕМЕННАЯ=значение
.
Программа, представленная в листинге 2.3, отображает всю свою среду, просматривая в цикле массив >environ
.
>#include
>/* Массив ENVIRON содержит среду выполнения. */
>extern char** environ;
>int main() {
> char** var;
> for (var = environ; *var != NULL; ++var)
> printf("%s\n", *var);
> return 0;
>}
He пытайтесь модифицировать массив >environ
самостоятельно. Пользуйтесь для этих целей функциями