Читаем Основы программирования в Linux полностью

$ echo $НOМЕ

/home/neil

Вы также можете воспользоваться командой оболочки set для получения списка всех переменных окружения.

В спецификации UNIX определено множество стандартных переменных окружения, применяемых для самых разных целей, включая тип терминала, имена редакторов, установленных по умолчанию, названия часовых поясов и т.д. Программа на языке С может получить доступ к переменным окружения с помощью функций putenv и getenv.

#include

char *getenv(const char *name);

int putenv(const char *string);

Окружение состоит из строк видаимя=значение. Функция getenv ищет в окружении строку с заданным именем и возвращает значение, ассоциированное с этим именем. Она вернет NULL, если требуемая переменная не существует. Если переменная есть, но ее значение не задано, функция getenv завершится успешно и вернет пустую строку, в которой первый байт равен NULL. Строка, возвращаемая getenv, хранится в статической памяти, принадлежащей функции, поэтому для ее дальнейшего использования вы должны скопировать эту строку в другую, поскольку она может быть перезаписана при последующих вызовах функции getenv

Функция putenv принимает строку вида имя=значение и добавляет ее в текущее окружение. Она даст сбой и вернет -1, если не сможет расширить окружение из-за нехватки свободной памяти. Когда это произойдет, переменной errno будет присвоено значение ENOMEM.

В упражнении 4.4 вы напишeте программу для вывода значения любой выбранной вами переменной окружения. У вас также будет возможность задать значение, если вы укажете второй аргумент программы.

Упражнение 4.4. Функции getenv и putenv

1. Первые несколько строк после объявления функции main гарантируют корректный вызов программы environ.c с только одним или двумя аргументами:

#include

#include

#include

int main(int argc, char *argv[]) {

 char *var, *value;

 if (argc == 1 || argc > 3) {

  fprintf(stderr, "usage: environ var [value]\n");

  exit(1);

 }

2. Сделав это, вы извлекаете значение переменной из окружения с помощью функции getenv:

 var = argv[1];

 value = getenv(var);

 if (value)

  printf("Variable %s has value %s\n", var, value);

 else

  printf("Variable %s has no value\n", var);

3. Далее проверьте, был ли при вызове программы указан второй параметр. Если был, вы задаете значение этого аргумента, конструируя строку вида имя=значение и затем вызывая функцию putenv:

 if (argc == 3) {

  char *string;

  value = argv[2];

  string = malloc(strlen(var)+strlen(value)+2);

  if (!string} {

   fprintf(stderr, "out of memory\n");

   exit(1);

  }

  strcpy(string, var);

  strcat(string, "=");

  strcat(string, value);

  printf("Calling putenv with: %s\n", string);

  if (putenv(string) != 0) {

   fprintf(stderr, "putenv failed\n");

   free(string);

   exit(1);

  }

4. В заключение вы узнаете новое значение переменной, вызвав функцию getenv еще раз:

  value = getenv(var);

  if (value)

   printf("New value of %s is %s\n", var, value);

  else

   printf("New value of %s is null??\n", var);

 }

 exit(0);

}

Когда вы выполните эту программу, то сможете увидеть и задать переменные окружения:

$ ./environ НОМЕ

Variable HOME has value /home/neil

$ ./environ FRED

Variable FRED has no value

$ ./environ FRED hello

Variable FRED has no value

Calling putenv with: FRED=hello

New value of FRED is hello

$ ./environ FRED

Variable FRED has no value

Обратите внимание на то, что окружение локально по отношению к программе. Изменения, которые вы делаете в программе, не отражаются вне ее, поскольку значения переменных не передаются из дочернего процесса (вашей программы) в родительский (командную оболочку).

<p>Применение переменных окружения</p>
Перейти на страницу:

Похожие книги

Основы программирования в Linux
Основы программирования в Linux

В четвертом издании популярного руководства даны основы программирования в операционной системе Linux. Рассмотрены: использование библиотек C/C++ и стан­дартных средств разработки, организация системных вызовов, файловый ввод/вывод, взаимодействие процессов, программирование средствами командной оболочки, создание графических пользовательских интерфейсов с помощью инструментальных средств GTK+ или Qt, применение сокетов и др. Описана компиляция программ, их компоновка c библиотеками и работа с терминальным вводом/выводом. Даны приемы написания приложений в средах GNOME® и KDE®, хранения данных с использованием СУБД MySQL® и отладки программ. Книга хорошо структурирована, что делает обучение легким и быстрым. Для начинающих Linux-программистов

Нейл Мэтью , Ричард Стоунс , Татьяна Коротяева

ОС и Сети / Программирование / Книги по IT
1001 совет по обустройству компьютера
1001 совет по обустройству компьютера

В книге собраны и обобщены советы по решению различных проблем, которые рано или поздно возникают при эксплуатации как экономичных нетбуков, так и современных настольных моделей. Все приведенные рецепты опробованы на практике и разбиты по темам: аппаратные средства персональных компьютеров, компьютерные сети и подключение к Интернету, установка, настройка и ремонт ОС Windows, работа в Интернете, защита от вирусов. Рассмотрены не только готовые решения внезапно возникающих проблем, но и ответы на многие вопросы, которые возникают еще до покупки компьютера. Приведен необходимый минимум технических сведений, позволяющий принять осознанное решение.Компакт-диск прилагается только к печатному изданию книги.

Юрий Всеволодович Ревич

Программирование, программы, базы данных / Интернет / Компьютерное «железо» / ОС и Сети / Программное обеспечение / Книги по IT