Skip to content

Home Программирование Чтение окружения: environ, getenv()
Чтение окружения: environ, getenv()

Программа может читать окружение двумя способами:

  1. Посредством внешней переменной environ, представляющей собой массив строк переменная=значение. Эта переменная объявлена в заголовочном файле unistd.h.
  2. При помощи функции getenvt), которая возвращает значение указанной переменной окружения. Эта функция объявлена в заголовочном файле stdlib.h.

Функция getenv () имеет следующий прототип:

char * getenv (char * VAR_NAME);

Она возвращает значение указанной переменной var_name. Если переменная отсутствует в окружении, то возвращается null.

Рассмотрим сначала пример, использующий environ. Следующая программа  просто выводит на экран все окружение.

Программа myenvl.с

#include <stdio.h> 
#include <unistd.h>
extern char ** environ;
int main (void) {
int i;
for (i = 0; environ[i] != NULL; i++)
printf ("%s\n", environ[i]);
return 0; }

Массив environ обычно служит для просмотра окружения (как в нашем случае), а также для передачи окружения в другой процесс в ходе реализации многозадачности, но об этом речь пойдет в главе 10. Для получения значения конкретной переменной предназначена функция getenv {}. Приведенная в листинге  программа демонстрирует ее работу.

Программа myenv2.с

iinclude <stdio.h>
int main (int argc, char ** argv)
{
char * value;
if (argc < 2)
{
fprintf (stderr, "Usage: myenv2 <variable>\n");
return 1;
}
value = (char*) getenv (argv[l]);
if (value == NULL)
printf ("%s not found\n", argv[l]);
else
printf ("%s=%s\n", argv[l], value);
return 0;
}

Программа выводит значение переменной окружения, имя которой читается из первого аргумента командной строки (argv[i]j. Функция getenv () возвращает значение null, если переменная окружения не найдена. В этом случае наша программа выводит соответствующее сообщение:

$ gcc -о myenvl myenvl.c
$ ./myenvl ABRAKADABRA
ABRAKADABRA not found
$ ./myenvl USER
USER=nn
$ ./myenvl user
user not found

Обратите внимание, что имена переменных окружения чувствительны к регистру символов. Исторически сложилась практика именования переменных. окружения заглавными буквами, однако символы нижнего регистра также допускаются. Действительно, запись "user not found" выглядит несколько двусмысленно: то ли переменная user не найдена, то ли пользователь не найден. А все из-за того, что имя переменной сливается с остальным текстом.

Комментарии (0)

RSS feed Comments

Написать комментарий

smaller | bigger

busy
 

Регистрация




Top