Приклад: pick

Версія pick, запропонована в розділі 5, була явним розширенням можливостей оболонки Програма, яка зараз буде написана на Сі, буде дещо відрізнятися від версії глави 5 Якщо аргументи для pick вказані, вони обробляються так само, як і раніше, а от якщо зазначений тільки один аргумент «-», то команда обробляє стандартний ввід

Чому б не читати стандартний ввід у разі, якщо не вказаний жоден аргумент Розглянемо другу версію команди zap з розділу 56:

kill $SIG ‘pick \‘ps  –ag | egrep  ”$*”\‘  | awk  ’{print  }’‘

Що відбудеться, якщо для шаблону egrep не знайдено жодного відповідності У цьому випадку немає аргументів для pick, і вона починає зчитувати свій стандартний ввід а команда zap таємничим чином виходить з ладу Вимога наявності явного аргументу є простим способом усунення неоднозначності подібних ситуацій, позначення ж «-» підказане cat і іншими програмами

/ * Pick: можливість вибору кожного аргументу * /

#include &ltstdioh&gt

char * progname / * Імя програми для повідомлення про помилку * /

main(argc,  argv) int  argc

char  *argv[]

{

int i

char  buf[BUFSIZ]

progname = argv[0]

if  (argc == 2 &amp&amp  strcmp(argv[1],&quot–&quot)  == 0)    /*  pick  – */ while  (fgets(buf,  sizeof buf,  stdin) =  NULL)  {

buf [strlen (buf) -1] = \ 0; / * Видалити символ нового рядка * / pick (buf)

} else

for  (i  =  1  i  &lt  argc  i++) pick(argv[i])

exit(0)

}

pick (s) / * можливість вибору s * / char * s

{

fprintf(stderr,  &quot%s  &quot,  s) if  (ttyin()  ==  y)

printf(&quot%s\n&quot, s)

}

У програмі pick зосереджені можливості інтерактивного вибору аргументів Це не просто корисна послуга, таким чином зменшується потреба в «інтерактивних» параметрах для інших команд

Вправа 610Тепер, коли в нашому розпорядженні є pick, чи потрібна rm-i ~

Джерело: Керниган Б, Пайк Р, 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>

*

*