Главная » Программирование для UNIX » Доступ к окружению UNIX

0

Из  программы, написанной на Си,  легко получить доступ  к переменным окружения оболочки, это обстоятельство позволяет адаптировать программы к  окружению, не  требуя  многого от  их  пользователей. Предположим, что  используется терминал,  экран которого больше, чем обычные 24 строки. Что делать, если надо выполнить программу p и при  этом хочется воспользоваться возможностями терминала? Ука зывать размер экрана при каждом запуске p слишком утомительно:

$ p -36  …

Всегда можно поместить командный файл в свой каталог /bin:

$ cat  /usr/you/bin/p

exec  /usr/bin/p –36 $*

$

Есть и третье решение – изменить p так, чтобы она использовала пере менную окружения, которая определяет свойства терминала. Предположим, что вы задаете переменную PAGESIZE в файле .profile:

PAGESIZE=36 export  PAGESIZE

Стандартная функция getenv  (“var”) ищет в  окружении  переменную оболочки var  и  возвращает ее значение в форме  символьной  строки или  NULL, если  переменная не определена. Имея в наличии getenv, легко изменить программу p. Надо  лишь добавить несколько объявлений и вызов getenv в начале функции main.

/*  p:  печатать  входные данные порциями  (версия  3)  */

char    *p,  *getenv();

progname = argv[0];

if  ((p=getenv("PAGESIZE"))  !=  NULL) pagesize  =  atoi(p);

if  (argc > 1 &&   argv[1][0] == ‘–’) {

pagesize  =  atoi(&argv[1][1]); argc––;

argv++;

}

Необязательные аргументы обрабатываются  после  переменной окру жения,  поэтому явно  заданный размер страницы будет  преобладать над неявным.

Упражнение 6.17.  Измените idiff так, чтобы окружение просматривалось  в поисках имени редактора, который будет  использоваться. Измените 2, 3 и т. д., чтобы использовать PAGESIZE. ~

История и библиография

Стандартная  библиотека  ввода-вывода была  разработана  Деннисом Ритчи (Dennis Ritchie) на основе переносимой библиотеки ввода-вывода Майка Леска (Mike  Lesk). Цель  обоих  пакетов состоит  в том,  чтобы  предоставить достаточно стандартных средств, обеспечивающих пере нос программ из UNIX  в другие системы без изменений.

Предложенная архитектура p базируется на программе Генри  Спенсера (Henry Spencer).

Отладчик adb был написан Стивом  Бурном (Steve Bourne), sdb – Говар дом Катцеффом (Howard Katseff), а lint – Стивом  Джонсоном (Steve Johnson).

Программа idiff написана «по  мотивам» программы, созданной Джо  Маранзано (Joe Maranzano). Сама  программа diff принадлежит Дагу  Мак-Илрою (Doug  McIlroy), а основывается она на алгоритме, независимо разработанном Гарольдом Стоуном  (Harold Stone) и Уэйном Хан том (Wayne Hunt) с Томом Шимански (Tom Szymanski). (Hunt J. W., Szymanski O. G.  «A   fast  algorithm for   computing  longest  common subseguences», CACM,    May    1977.)  Алгоритм  diff   описан    Мак Илроем М. Д. и Хантом Д. У. в статье «An algorithm for differential file  comparison», появившейся в Bell Labs Computing Science Technical Report 41 в 1976  году. Процитируем Мак-Илроя: «Я опробовал как минимум  три  различных алгоритма, прежде чем  на  чем-то  остановиться. Программа diff  является  наиболее типичным  случаем того,  когда в программе не довольствуешься просто выполнением задачи, а переде лываешь ее до тех пор, пока  она не станет совершенной».

По договору между издательством «Символ-Плюс» и Интернет-магазином  «Books.Ru Книги России» единственный  легальный способ получения  данного  файла  с  книгой  ISBN   5-93286-029-4,  название

«UNIX.  Программное окружение»  –  покупка  в  Интернет-магазине

«Books.Ru Книги России». Если  Вы получили данный файл какимлибо другим образом, Вы нарушили международное законодательство и законодательство Российской Федерации об охране авторского пра-

ва. Вам необходимо удалить данный файл, а также сообщить издатель-

ству «Символ-Плюс» (piracy@symbol.ru), где именно Вы получили данный файл.

Источник: Керниган Б., Пайк Р., UNIX. Программное окружение. – Пер. с англ. – СПб: Символ-Плюс, 2003. – 416 с., ил.

По теме:

  • Комментарии