Читать книгу 📗 "Linux программирование в примерах - Роббинс Арнольд"
78 {79 int flags = REG_NOSUB; /* информация о месте совпадения не требуется */80 int ret;81 #define MSGBUFSIZE 512 /* произвольно */82 char error[MSGBUFSIZE];8384 if (ignore_case)85 flags |= REG_ICASE;86 if (extended)87 flags |= REG_EXTENDED;8889 ret = regcomp(&pattern, pat, flags);90 if (ret != 0) {91 (void)regerror(ret, &pattern, error, sizeof error);92 fprintf(stderr, "%s: pattern '%s': %sn", myname, pat, error);93 errors++;94 }95 }Строки 75–95 определяют функцию
compile_pattern()REG_NOSUBflagsСтроки 84-85 добавляют дополнительные флаги в соответствии с опциями командной строки. Строка 89 компилирует шаблон, а строки 90–94 сообщают о возникших ошибках
97 /* process --- читает строки текста и сопоставляет их с шаблоном */9899 void process(const char *name, FILE *fp)100 {101 char *buf = NULL;102 size_t size = 0;103 char error[MSGBUFSIZE];104 int ret;105106 while (getline(&buf, &size, fp) != -1) {107 ret = regexec(&pattern, buf, 0, NULL, 0);108 if (ret != 0) {109 if (ret != REG_NOMATCH) {110 (void)regerror(ret, &pattern, error, sizeof error);111 fprintf(stderr, "%s: file %s: %sn", myname, name, error);112 free(buf);113 errors++;114 return;115 }116 } else117 printf("%s: %s", name, buf); /* вывести подходящие строки */118 }119 free(buf);120 }Строки 97–120 определяют функцию
process()getline()getline()getdelim()regexec()REG_NOMATCНЕсли возвращаемое значение равно 0, строка совпала с шаблоном и соответственно строка 117 выводит имя файла и совпавшую строку.
122 /* usage --- вывод сообщения об использовании и выход */123124 void usage(void)125 {126 fprintf(stderr, "usage: %s [-i] [-E] pattern [ files ... ]n", myname);127 exit(1);128 }Функция
usage()Вот и все! Скромная, но тем не менее полезная версия
grep12.9. Рекомендуемая литература
1. Programming Pearls, 2nd edition, by Jon Louis Bentley Addison-Wesley, Reading, Massachusetts, USA, 2000. ISBN- 0-201-65788-0. См. также веб-сайт этой книги. [131]
Проектирование программы с операторами проверки является одной из главных тем в этой книге.
2. Building Secure Software How to Avoid Security Problems the Right Way, by John Viega and Gary McGraw Addison-Wesley, Reading, Massachusetts, USA, 2001. ISBN: 0-201-72152-X.
Состояния гонки являются одной из многих проблем, о которых нужно побеспокоиться при написании безопасного программного обеспечения. Другой проблемой являются случайные числа. Данная книга рассматривает наряду с другими обе эти проблемы (Мы упоминали о ней в предыдущей главе.)
3. The Art of Computer Programming. Volume 2. Seminumerical Algorithms, 3rd edition, by Donald E. Knuth Addison-Wesley, Reading, Massachusetts, USA, 1998. ISBN- 0-201-89684-2. [132] См также веб-сайт этой книги. [133]
Это классическое справочное руководство по генерации случайных чисел.
4. Random Number Generation and Monte Carlo Methods, 2nd edition, by James E. Gentle Springer-Verlag, Berlin, Germany. 2003. ISBN: 0-387-00178-6.
Данная книга широко освещает методы генерации и тестирования псевдослучайных чисел. Хотя для неё также требуется математическая и статистическая подготовка, уровень не такой высокий, как в книге Кнута. (Благодарим Nelson H.F. Beebe за указание этой ссылки.)
5. sed & awk, 2nd edition, by Dale Dougherty and Arnold Robbins. O'Reilly and Associates, Sebastopol, California, USA, 1997. ISBN: 1-56592-225-5.
Эта книга осторожно вводит в регулярные выражения и обработку текста, начиная с
grepsedawk6. Mastering Regular Expressions, 2nd edition, by Jeffrey E.F. Friedl. O'Reilly and Associates, Sebastopol, California, USA, 2002. [134] ISBN: 0-59600-289-0.