Главная » Программирование для UNIX » Пример: pick

0

Версия pick, предложенная в главе 5, была  явным расширением возможностей оболочки. Программа, которая сейчас будет написана на Си, будет несколько отличаться от версии главы 5. Если аргументы для pick указаны, они обрабатываются так же, как и раньше, а вот если указан только один аргумент «–», то команда обрабатывает стандартный ввод.

Почему бы  не  читать стандартный ввод  в  случае, если  не  указан ни один аргумент? Рассмотрим вторую версию команды zap из раздела 5.6:

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

Что произойдет, если для шаблона egrep не найдено ни одного соответствия? В этом  случае нет аргументов для  pick, и она начинает считывать  свой стандартный ввод;  а команда zap таинственным образом выходит из строя. Требование наличия явного аргумента является простым  способом  устранения  неоднозначности подобных ситуаций,  обозначение же «–» подсказано cat и другими программами.

/*  pick:  возможность  выбора каждого аргумента */

#include <stdio.h>

char        *progname;    /*  имя программы  для сообщения об  ошибке  */

main(argc,  argv) int  argc;

char  *argv[];

{

int i;

char  buf[BUFSIZ];

progname = argv[0];

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

buf[strlen(buf)–1] = ‘\0′;   /*  удалить символ новой строки */ pick(buf);

} else

for  (i  =  1;  i  <  argc;  i++) pick(argv[i]);

exit(0);

}

pick(s)  /*  возможность  выбора  s  */ char  *s;

{

fprintf(stderr,  "%s?  ",  s); if  (ttyin()  ==  ‘y’)

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

}

В программе pick сосредоточены возможности интерактивного выбора аргументов. Это не просто полезная услуга, таким образом уменьшается потребность в «интерактивных» параметрах для других команд.

Упражнение 6.10.   Теперь,  когда  в  нашем  распоряжении  есть  pick, нужна ли rm –i? ~

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

По теме:

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