Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PR_СП_лабы_11.doc
Скачиваний:
7
Добавлен:
22.04.2019
Размер:
755.71 Кб
Скачать

2. Змінні оточення

ОС UNIX надає кожній виконуваній програмі середовище виконання або, кажучи іншими словами, оточення програми. Під середовищем мається на увазі сукупність пар змінна-значення. Ці змінні називаються змінними оточення. Імена змінних оточення та їх значення є рядками. За існуючою угодою змінні оточення записуються великими літерами.

Наприклад:

USER - містить ім'я поточного користувача;

HOME - містить шлях до початкового каталогу поточного користувача;

PATH - містить розділений двокрапками список каталогів, які операційна система переглядає в пошуку викликаної програми.

Стандарт POSIX.1 визначає аргумент envp[] в оголошенні функції main для того, щоб отримати доступ до списку змінних оточення

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

Стандарт ANSI C визначає тільки два перші аргументу. Тому рекомендується здійснювати доступ до змінних оточення через глобальну змінну environ:

Наведемо приклад програми, яка виводить всі змінні оточення програми.

# Include <stdio.h>

extern char ** environ;

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

{char ** var;

for (var = environ; * var! = NULL; + + var)

printf (" % s \ n ", * var);

return 0;}

Для отримання та встановлення конкретних значень змінних оточення використовуються функції getenv() і putenv().

# Include <stdlib.h>

char * getenv (const char * name)

int putenv (const char * string)

Введене значення змінної буде доступно в даному процесі і його дочірніх. Тому, для того, щоб побачити результат дії, треба виводити список змінних оточення в тій же програмі, де відбувається установка значення.

Для установки и сброса значений переменных окружения предназначены функции setenv() и unsetenv() соответственно.

Обычно при запуске программа получает копию среды своей родительской программы (интерпретатора команд, если она была запущена пользователем). Таким образом, программы, запущенные из командной строки, могут исследовать среду интерпретатора команд.

3. Індівідуальні завдання

  1. Вивести список імен всіх змінних оточення процесу (без значень).

  2. Вивести список значень всіх змінних оточення процесса (без імен).

  3. Вивести значення змінної оточення, ім'я якої ука-ано першим аргументом командного рядка (якщо він відсутній, запитати з клавіатури); якщо змінній не существуєт, створити її, значення узяти з другого аргументу командного рядка (якщо він відсутній, запитати з клавіатурі).

  4. Вивести імена і значення змінних оточення, імена яких вказані в командному рядку запуску програми.

  5. Вивести список імен і значень змінних оточення процесу; за наявності аргументу-опції –t наступний аргумент вважати символами, з яких повинні починатися імена змінних, що відображуються; за відсутності опції відображувати всі змінні.

  6. Вивести список імен і значень змінних оточення процесу; за наявності аргументу-опції –t наступний аргумент вважати символами, з яких повинні починатися значення змінних, що відображуються; за відсутності опциі відображувати всі змінні.

  7. Обробити два аргументи командного рядка: якщо аргументи є іменами існуючих змінних оточення процесу, вивести їх значення на екран; якщо існує лише одна змінна, задати їй нове значення, узявши його з другого аргументу; якщо вказані змінні відсутні, створити нову змінну, узявши її ім'я з першого аргументу, а значення – з другого.

  8. Виконати певну дію із змінною оточення, ім'я якої вказане в командному рядку, в залежності від аргументу-опції: при –d – видалити змінну, якщо вона існує; при –p – вивести значення, якщо вона існує, при –c – створити, узявши ім'я і значення з наступних аргументів.

  9. Створити копії всіх змінних оточення у вигляді нових змінних оточення з іменами вигляду <ім’я_змінної>1 і відповідними значеннями су-ществующих змінних (наприклад, для PATH – Path1 з тим же значенням).

  10. Якщо існує змінна оточення з ім'ям, вказаним в командному рядку, створити нову змінну з ім’ям, рівним значенню вказаної змінної, і значенням, рівним імені вказаної змінної (наприклад, для змінної Editor=mcedit створити змінну mcedit=editor). Обробити аналогічним чином всі вказані аргументи.

  11. Заздалегідь створити змінну оточення MYENVS із зна-ченієм вигляду "ім’я1{;ім’я2;им’я3...}" (список імен існуючих змінних оточення). У програмі прочитати список імен і вивести на екран значення відповідних змінних оточення.

  12. Заздалегідь створити змінну оточення NEWENV із зна-ченієм вигляду "ім’я:значння". У програмі прочитати це значення і створити нову змінну оточення з соот-ветствующимі ім'ям і значенням.

  13. Доповнити значення змінної оточення PATH шляхом (ім'ям каталога), вказаним у командному рядку запуску програми. (виключити повтори). Обробити всі аргументі аналогічним чином.

  14. Створити змінну оточення ENVVARS із значенням, складеним з імен і значень всіх змінних оточення процесу (роздільник між ім'ям і значенням – знак ''-'', роздільник між значенням і ім'ям наступної змінної - символ '';'', наприклад, Envvars=backspace-delete;BASH-/bin/bash;...).

  15. Створити змінну оточення з ім'ям PATHL і значенням, рівним останньому шляху з набору шляхів змінною оточення PATH.

  16. Вивести імена і значення змінних оточення, в іменах або значеннях яких зустрічається рядок, вказаний аргументом командного рядка запуску програми.

  17. Визначити і вивести на екран розмір оточення процесу: загальну довжину всіх рядків змінних оточення в байтах і кількість змінних оточення.

  18. Вивести на екран всі змінні оточення у вигляді двох колонок: ім'я і значення (дані в колонці вирівняні по лівому краю).

  19. Визначити, чи існують в оточенні процесу змінні з однаковими значеннями; якщо так – вивести значення і список імен змінних для кожного такого значення.

  20. Вивести на екран кількість змінних оточення, ім'я яких починається з символу, вказаного в командному рядку програми (якщо символ не вказаний – кількість всіх змінних оточення).

  21. Для змінної оточення, вказаної в командному рядку програми, вивести ім'я, значення, загальну довжину (включаючи ім'я і значення), а також порядковий номер в списку змінних оточення.

  22. Доповнити оточення програми змінними, заданими в командному рядку у вигляді рядків "Ім’я=значення".

  23. Вивести на екран змінні оточення програми, імена яких містять рядкові (маленькі) букви.

  24. Для вказаної в командному рядку змінної оточення визначити довжини імені і значення; створити дві нові змінні оточення LENN і LENV із значеннями цих довжин.

  25. Вивести на екран імена і значення змінних оточення, довжина імен яких дорівнює числу, вказаному в командному рядку програми.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]