Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Краткая теория. Окружение(environment)- это набор специфических для конкретного пользователя пар ПЕРЕМЕННАЯ=ЗНАЧЕНИЕ

Читайте также:
  1. БИЛЕТ№46. Краткая история развития органического мира.
  2. В – 1. Краткая история финансов и финансовой науки.
  3. Виды излучения и их краткая характеристика.
  4. Вопрос 31. Нормативы качества окружающей среды и их краткая характеристика.
  5. ВОПРОС 4. Краткая история возникновения теории и практики игрового обучения
  6. Выбор дезинфектанта. Краткая характеристика наиболее часто используемых дезинфицирующих средств
  7. Жизненный цикл вновь создаваемой продукции, краткая характеристика этапов.
  8. Знания. Задача, проблема, теория.
  9. История цифры – краткая только пока
  10. Классификация и краткая характеристика различных типов транзисторов

Окружение(environment)- это набор специфических для конкретного пользователя пар ПЕРЕМЕННАЯ=ЗНАЧЕНИЕ. Каждый процесс имеет свою копию окружения и свободно ей распоряжается ею. Чтобы посмотреть что представляет собой окружения, введите в командной строке(или в терминале) команду: $env

В современных Linux-дистрибутивах окружение представлено многими переменными, но более часто используются только некоторые из них:

USER- имя пользователя;

HOME- домашний каталог;

PATH- список каталогов, в которых осуществляется поиск исполняемых файлов программ;

SHELL- используемая командная оболочка;

PWD- текущий каталог;

В C/C++ так можно обрабатывать окружение. Читать окружение можно двумя способами:

1. С помощью внешней переменной ENVIRON, представляющая собой массив строк ПЕРЕМЕННАЯ=ЗНАЧЕНИЕ. Эта переменная объявлена в заголовочном файле UNISTD.H

2. При помощи функции getevn(), которая возвращает значение указанной переменной окружения. Эта функция объявлена в заголовочном файле STDLIB.H.

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

char *getevn (char*VAR_NAME);

Переменная возвращает значение указанной переменной VAR_NAME. Если таковой переменной не существует, то вернётся значение NULL.

 

 

Пример работы с переменной environ.

#include <stdio.h>

#include <unistd.h>

extern char **environ;

int main()

{int i;

for(i=0;environ[i]!=NULL;i++)

printf(“%s\n”, environ[i]);

return 0;

}

Пример программы с функции getevn().

#include<stdio.h>

int main(int arvc, char **argv)

{char * value;

if(argc<2)

{printf(“Ошибка! Нужно больше аргументов!”);

return 1;

}

value= (char*) getevn(argv[1]);

if(value=NULL)

printf(“%s не найден”, value);

else

printf(“%s=%s\n”, argv[1],value);

return 0;}

При работе с окружением может возникнуть потребность изменить некоторые переменные. На практике модификации окружения осуществляется с помощью функций setenv(), putenv() и unsetenv(), которые объявлены в заголовочном файле STDLIB.H.

Прототипы функции:

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

int putenv(char *INITSTR);

int unstenv(const char* NAME);

Функция setenv() добавляет новую или изменяет существующую переменную окружения с именем NAME, присваивая значения VALUE. OV –флаг перезаписи, показывающий, нужно ли перезаписывать переменную или нет. Если он будет равен нулю, то переменная перезаписывается, иначе остаётся неизменной.

Функция putenv() добавляет новую или изменяет уже существующую переменную окружения, используя строку инициализации INITSTR в формате ПЕРЕМЕННАЯ=ЗНАЧЕНИЕ. Следует отметить, что эта функция есть не во всех UNIX-подобных системах, что может сказаться на переносимости.

Функция unsetenv() удаляет переменную с именем NAME из окружения.

Все данные функции возвращают значение 0 при удачном завершении работы и значение -1, если произошла ошибка.

Рассмотрим примеры с каждой из функций.

Пример 1. Setenv().

#include <stdlib.h>

#include <stdio.h>

int main(int argc, char **argv)

{ int ov_flag=1;

char *var;

if(argc<3)

{printf(“Ошибка! Мало аргументов\n”); return 1;}

setenv(argv[1],argv[2],ov_flag);

var=getenv(argv[1]);

if(var==NULL)

printf(“Переменная не найдена\n”);

else printf(“%s=%s”,argv[1],var);

return 0;}

Пример 2. Putenv().

#include <stdlib.h>

#include <stdio.h>

int main(int argc, char **argv)

{ char *var;

char initvar[1024];

if(argc<3)

{printf(“Ошибка! Мало аргументов\n”); return 1;}

sprintf(initvar,”%s=%s”, argv[1],argv[2]);

putenv(initvar);

var=getenv(argv[1]);

if(var==NULL)

printf(“Переменная не найдена\n”);

else printf(“%s=%s”,argv[1],var);

return 0;}

Пример 3. Unsetenv().

#include <stdio.h>

#include <unistd.h>

extern char **environ;

int main(int argc, char **argv)

{ int i;

if(argc<2)

{printf(“Ошибка! Мало аргументов\n”); return 1;}

if(unsetenv(argv[1])!=0)

{printf(“Ошибка! Переменная не удалена\n”); return 1;}

for(i=0; environ[i]!=NULL;i++)

printf(“%s\n”, environ[i]);

return 0;}

 

Варианты заданий.

1. Написать программу, которая осуществляет вывод окружения на экран. Заменить значение любых двух переменных окружения.

2. Написать программу, которая осуществляет вывод 5 первых переменных окружения на экран. Заменить значение двух переменных, удалить одну переменную.

3. Написать программу, которая выводит указанную переменную на экран. Копировать ее значение в другую переменную, а указанную удалить.

4. Написать программу, которая выводит 10 переменных окружения. Изменить значение 5 из них, добавить новую переменную, удалить первые 3 переменные.

5. Написать программу, которая выводит 4 указанных переменных окружения. Изменить значение двух переменных и удалить одну

6. Написать программу, которая выводит 10 последних переменных окружения. Поменять местами значение первых двух с последними двумя переменными.

 

Контрольные вопросы

1. Что такое окружение?

2. Какие переменные окружения вы знаете?

3. Назовите и опишите функции для работы с окружением.

 




Дата добавления: 2014-12-15; просмотров: 32 | Поможем написать вашу работу | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2024 год. (0.011 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав