■ PATH
■ DISPLAY
Интерпретатор команд, как и любая другая программа, располагает своей средой. Имеются средства просмотра и редактирования переменных среды из командной строки. Например, программа printenv
■ Интерпретатор автоматически создает локальную переменную (называемую переменной интерпретатора) для каждой обнаруживаемой им переменной среды. Благодаря этому возможен доступ к переменным среды через выражения вида $
% echo $USER
samuel
% echo $HOME
/home/samuel
■ С помощью команды export
EDITOR
:% EDITOR=emacs
% export EDITOR
Или короче:
% export EDITOR=emacs
В программе доступ к переменным среды осуществляет функция getenv()
. В качестве аргумента она принимает имя переменной и возвращает се значение в строковом виде или NULL
, если переменная не определена в данной среде. Для установки и сброса значений переменных среды предназначены функции setenv()
и unsetenv()
соответственно.Получить список всех переменных среды немного сложнее. Для этого нужно обратиться к специальной глобальной переменной environ
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
setenv()
и unsetenv()
.Обычно при запуске программа получает копию среды своей родительской программы (интерпретатора команд, если она была запущена пользователем). Таким образом, программы, запущенные из командной строки, могут исследовать среду интерпретатора команд.
Переменные среды чаще всего используют для передачи программам конфигурационной информации. Предположим, к примеру, что требуется написать программу, подключающуюся к серверу Internet. Имя сервера может задаваться в командной строке, но, если оно меняется нечасто, имеет смысл определить специальную переменную среды — скажем, SERVER_NAME
#include
#include
int main() {
char* server_name = getenv("SERVER_NAME");
if (server_name == NULL)
/* переменная среды SERVER_NAME не задана. Используем
установки по умолчанию. */
server_name = "server.my-company.com";
printf("accessing server %s\n", 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
2.1.7. Временные файлы
Иногда программе требуется создать временный файл, например для промежуточного хранения большого объема данных или для передачи данных другой программе. В системах GNU/Linux временные файлы хранятся в каталоге /tmp