Описание программы, переменные окружения

Выполнение программы начинается с создания в памяти её образа и связывания с процессом структур ядра ОС, инициализации и передачи управления инструкциям программы. Завершение программы приводит к освобождению памяти и соответствующих структур ядра. Образ программы в памяти содержит сегменты инструкций и данных, созданных компилятором, а также стек, которым пользуется программа в ходе выполнения.

Окружение – набор переменных и их значений, с помощью которых программе можно передавать данные общего назначения.

Описание головной функции программы может выглядеть или так:

main (int argc, char *argv[], char *envp[]);

или так:

extern char **environ; // глобальная переменная, указывающая на строки

// с переменными окружения.

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

argc - определяет число параметров, переданных программе, включая её имя. Указатели на каждый из этих параметров хранятся в массиве, являющемся указателем на эти аргументы.

Второй массив - массив указателей на переменные окружения, передаваемые программе. Каждая переменная содержит строку вида:

HOME=/home/student/851003.

Основные переменные окружения следующие.

HOME - имя каталога, который становится текущим после входа пользователя в систему.

PATH - последовательность полных файловых путей, разделенных двоеточием, которые используются некоторыми программами для поиска файлов, заданных относительным именем.

TERM - тип терминала

TZ - информация о часовом поясе.

LOGNAME - регистрационное имя пользователя.

LC_NUMERIC - значение категории локализации, определяющей правила национального представления чисел с плавающей точкой.

LC_TIME - значение категории локализации, определяющей правила национального представления времени и даты.

Пример.

#include <stddef.h>

#include <stdio.h>

#include <stdlib.h>

extern char **environ;

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

{

char *ch;

char bufer[200], var[200];

if ((ch=getenv("MYVAR"))==NULL)

{

printf("Переменная MYVAR не определена. Введите значение: ");

gets(bufer);

sprintf(var,"MYVAR=%s",bufer);

putenv(var);

printf("Новое значение %s \n",var);

}

else

{

printf("MYVAR=%s. Изменить? ",ch);

gets(buf);

if (buf[0]=='Y' || buf[0]=='y')

{

printf("Новое значение: ");

gets(buf);

sprintf(var,"MYVAR=%s",bufer);

putenv(var);

printf("Новое значение MYVAR=%s",var);

}

}

}

char *getenv (const char *name);

int putenv(const char *string);

Для получения и установки значений переменной окружения применяются две функции: getenv возвращает значение переменной окружения, имеющей имя name; putenv помещает переменную и ее значение в окружение программы. Переменные окружения позволяют передать программе некоторую информацию, однако большую часть информации программа получает от пользователя в ходе ее выполнения.

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

Можно модифицировать переменные окружения.

Пример:

#include<stdlib.h>

int setenv(const char * NAME, const char * VALUE, int OV);

int putenv(const char * NAME);

int unsetenv(const char * NAME);

Setenv – добавляет новую переменную окружения или заменяет уже существующую переменную окружения заданную первым аргументом, присваивает ей значение заданное вторым аргументом, третий аргумент – это флаг, показывающий нужно ли перезаписывать переменную, если она уже существует (если 0,то не перезаписывается, в противном случае изменяется). При успешном завершении возвращает 0 и -1 при ошибке.

Putenv - добавляет новую переменную окружения или заменяет уже существующую переменную окружения. Использует аргумент который должен иметь вид ПЕРЕМЕННАЯ=ЗНАЧЕНИЕ. При успешном завершении возвращает 0 и -1 при ошибке.

Unsetenv – удаляет переменную заданную в начале аргумента из окружения. При успешном завершении возвращает 0 и -1 при ошибке.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: