Книга: UNIX — универсальная среда программирования
6.5 Пример: pick
6.5 Пример: pick
Версия pick
из гл. 5, несомненно, увеличивает возможности shell
. Версия на Си, приведенная ниже, в чем-то отличается от рассмотренной в гл. 5. Если эта версия имеет аргументы, то они обрабатываются так же, как и ранее, но если определен единственный аргумент '-'
, pick
обрабатывает свой стандартный входной поток.
Почему бы в отсутствие аргументов просто не читать стандартный входной поток? Рассмотрим вторую версию команды zap
из разд. 5.6:
kill $SIG `pick`ps-ag | egrep "$*"` | awk '{print $1}'`
Что происходит, если шаблон egrep
ни с чем не совпадает? В этом случае pick
не имеет аргументов и читает свой стандартный входной поток; команда zap
терпит неудачу загадочным образом. Требование явного аргумента простой способ устранить неоднозначность, и соглашение о '-'
в cat
и других программах показывает, как его определить.
/* pick: offer choice on each argument */
#include <stdio.h>
char *progname; /* program name for error message */
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] = ''; /* drop newline */
pick(buf);
}
else
for (i = 1; i < argc; i++)
pick(argv[i]);
exit(0);
}
pick(s) /* offer choice of s */
char *s;
{
fprintf(stderr, "%s? ", s);
if (ttyin() == 'y')
printf("%sn", s);
}
Версия pick
предоставляет возможность диалогового выбора аргументов в одной программе. Это не только обеспечивает полезное средство, но и уменьшает потребность в "интерактивных" флагах для других команд.
Упражнение 6.10
Если есть pick
, существует ли необходимость в rm -i
?
- Элемент DateTimePicker
- Пример 34-1. Расширение строк
- Пример 34-4. Массивы и другие хитрости для раздачи колоды карт в четыре руки
- Пример установочного скрипта
- Пример из практики
- ПРИМЕР ПРОСТОЙ ПРОГРАММЫ НА ЯЗЫКЕ СИ
- Примеры получения статистики
- Пример применения метода «пять почему»
- Пример 12-8. Частота встречаемости отдельных слов
- 1.2.5. Пример программы
- Пример 17-10. Блочный комментарий
- Примеры