Доступ до оточення UNIX

З програми, написаної на Сі, легко отримати доступ до змінних оточення оболонки, ця обставина дозволяє адаптувати програми до оточення, не вимагаючи багато від їх користувачів Припустимо, що використовується термінал, екран якого більше, ніж звичайні 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(&quotPAGESIZE&quot))  =  NULL) pagesize  =  atoi(p)

if  (argc &gt 1 &amp&amp   argv[1][0] == –) {

pagesize  =  atoi(&ampargv[1][1]) argc––

argv++

}

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

Вправа 617Змініть 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 JW, Szymanski OG «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 є найбільш типовим випадком того, коли в програмі НЕ задовольняєшся просто виконанням завдання, а переді закладають її доти, поки вона не стане досконалою »

За договором між видавництвом «Символ-Плюс» та Інтернет-магазином «BooksRu Книги Росії» єдиний легальний спосіб отримання даного файлу з книгою ISBN 5-93286-029-4, назва

«UNIX Програмне оточення »- покупка в Інтернет-магазині

«BooksRu Книги Росії» Якщо Ви отримали даний файл какимлибо іншим чином, Ви порушили міжнародне законодавство і законодавство Російської Федерації про охорону авторського пра-

ва Вам необхідно видалити даний файл, а також повідомити видавець-

ству «Символ-Плюс» (piracy@symbolru), де саме Ви отримали даний файл

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

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*