2.1.6. Среда выполнения
2.1.6. Среда выполнения
Операционная система Linux предоставляет каждой запущенной программе среду выполнения. Под средой подразумевается совокупность пар переменная-значение. Имена переменных среды и их значения являются строками. По существующему соглашению переменные среды записываются прописными буквами.
Некоторые переменные должны быть знакомы большинству читателей, например:
? 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(), объявленная в файле <stdlib.h>. В качестве аргумента она принимает имя переменной и возвращает се значение в строковом виде или NULL, если переменная не определена в данной среде. Для установки и сброса значений переменных среды предназначены функции setenv() и unsetenv() соответственно.
Получить список всех переменных среды немного сложнее. Для этого нужно обратиться к специальной глобальной переменной environ, определенной в GNU-библиотеке языка С. Данная переменная имеет тип char** и представляет собой массив указателей на символьные строки, последним элементом которого является NULL. Каждая строка имеет вид ПЕРЕМЕННАЯ=значение.
Программа, представленная в листинге 2.3, отображает всю свою среду, просматривая в цикле массив environ.
Листинг 2.3. (print-env.c) Вывод переменных среды
#include <stdio.h>
/* Массив ENVIRON содержит среду выполнения. */
extern char** environ;
int main() {
char** var;
for (var = environ; *var != NULL; ++var)
printf("%s ", *var);
return 0;
}
He пытайтесь модифицировать массив environ самостоятельно. Пользуйтесь для этих целей функциями setenv() и unsetenv().
Обычно при запуске программа получает копию среды своей родительской программы (интерпретатора команд, если она была запущена пользователем). Таким образом, программы, запущенные из командной строки, могут исследовать среду интерпретатора команд.
Переменные среды чаще всего используют для передачи программам конфигурационной информации. Предположим, к примеру, что требуется написать программу, подключающуюся к серверу Internet. Имя сервера может задаваться в командной строке, но, если оно меняется нечасто, имеет смысл определить специальную переменную среды — скажем, SERVER_NAME, — которая будет хранить имя сервера. При отсутствии переменной программа берет имя, заданное по умолчанию. Интересующая нас часть программы показана в листинге 2.4.
Листинг 2.4. (client.с) Часть сетевой клиентской программы
#include <stdio.h>
#include <stdlib.h>
int main() {
char* server_name = getenv("SERVER_NAME");
if (server_name == NULL)
/* переменная среды SERVER_NAME не задана. Используем
установки по умолчанию. */
server_name = "server.my-company.com";
printf("accessing server %s ", server_name);
/* Здесь осуществляется доступ к серверу... */
return 0;
}
Допустим, программа называется client. Если переменная SERVER_NAME не задана, используется имя сервера, заданное по умолчанию:
% client
accessing server server.my-company.com
Вот как задается другой сервер:
% export SERVER_NAME=backup-server.elsewhere.net
% client
accessing server backup-server.elsewhere.net
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
2.19 «КДЕ» (Настольная среда K)
2.19 «КДЕ» (Настольная среда K) Само название «КДЕ» – явная пародия на CDE – Common Desktop Environment («Общая настольная среда») – последнюю попытку отрасли стандартизовать графическую среду на несвободной основе, предпринятую в конце девяностых годов. «K» в «КДЕ» ничего не
2.19 «КДЕ» (Настольная среда K)
2.19 «КДЕ» (Настольная среда K) Само название «КДЕ» — явная пародия на CDE — Common Desktop Environment («Общая настольная среда») — последнюю попытку отрасли стандартизовать графическую среду на несвободной основе, предпринятую в конце девяностых годов. «K» в «КДЕ» ничего не
Среда KDE
Среда KDE Среда рабочего стола KDE (K Desktop Environment, http://www.kde.org/) построена на основе кроссплатформенных библиотек Qt от Trolltech. Обилие программ, практически не отличающихся функционально, но зато сильно отличающихся внешним видом и поведением, только отпугивало пользователей от
Среда GNOME
Среда GNOME Среда GNOME (GNU Network Object Model Environment – сетевая объектная среда GNU, http://www.gnome.org/) возникла как ответ общества GNU на разработку KDE, когда библиотеки Qt еще не были свободны. Новая рабочая среда создавалась на основе инструментария GTK+, созданного ранее для графического
Общеязыковая среда выполнения
Общеязыковая среда выполнения В дополнение к спецификациям CTS и CLS, последней на данный момент аббревиатурой, которую мы рассмотрим, будет аббревиатура CLR (Common Language Runtime – общеязыковая среда выполнения). Для программирования термин среда, выполнения можно понимать, как
45 Новая среда
45 Новая среда Конечные пользователи, сидящие перед 19-дюймовыми мониторами, могут даже и не знать о том, является приобретенное программное обеспечение объектно-ориентированным "или нет. Можно даже утверждать, что если пользователи не прочитают об этом на коробке, в
8.1. UNIX-среда
8.1. UNIX-среда UNIX прост. Но надо быть гением, чтобы понять его простоту. Денис Ритчи (Dennis
Реализация и среда
Реализация и среда Мы подошли к важным свойствам среды разработки, поддерживающей создание