Майкл Джонсон - Разработка приложений в среде Linux. Второе издание

Здесь есть возможность читать онлайн «Майкл Джонсон - Разработка приложений в среде Linux. Второе издание» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: Москва, Год выпуска: 2007, ISBN: 2007, Издательство: Вильямс, Жанр: ОС и Сети, Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Разработка приложений в среде Linux. Второе издание: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Разработка приложений в среде Linux. Второе издание»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

Книга известных профессионалов в области разработки коммерческих приложений в Linux представляет собой отличный справочник для широкого круга программистов в Linux, а также тех разработчиков на языке С, которые перешли в среду Linux из других операционных систем. Подробно рассматриваются концепции, лежащие в основе процесса создания системных приложений, а также разнообразные доступные инструменты и библиотеки. Среди рассматриваемых в книге вопросов можно выделить анализ особенностей применения лицензий GNU, использование свободно распространяемых компиляторов и библиотек, системное программирование для Linux, а также написание и отладка собственных переносимых библиотек. Изобилие хорошо документированных примеров кода помогает лучше усвоить особенности программирования в Linux.
Книга рассчитана на разработчиков разной квалификации, а также может быть полезна для студентов и преподавателей соответствующих специальностей.

Разработка приложений в среде Linux. Второе издание — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Разработка приложений в среде Linux. Второе издание», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

if ((rerr = regcomp(&p, "(^(.*[^\\])#.*$)|(^[^#]+$)",

REG_EXTENDED|REG_NEWLINE))) {

if (rerr == REG_NOMATCH) {

/* строка просто не совпадает с регулярным выражением */

} else {

/* какая-то другая ошибка, например, неправильно сформированное регулярное выражение */

}

}

Данное расширенное регулярное выражение находит строки в файле, которые не включены в комментарии, или которые, по крайней мере, частично, заключены в комментарии посредством символов #без префикса \. Эту разновидность регулярного выражения удобно использовать в качестве простого анализатора синтаксиса для конфигурационного файла какого-нибудь приложения.

Даже если вы компилируете выражение, которое, по вашему мнению, является нормальным, вам все равно необходимо проверить его на наличие ошибок. Функция regcomp()возвращает нулевое значение при успешном выполнении компиляции и ненулевой код ошибки — в противном случае. Большинство ошибок может быть связано с разного рода ошибками в регулярных выражениях, но не исключено, что ошибка может быть связана с переполнением памяти. Далее в этой главе дается описание функции regerror().

#include

int regexec(const regex_t *preg, const chat *string, size_t nmatch,

regmatch_t pmatch[], int eflags);

Функция regexec()сравнивает строку с предварительно компилированным регулярным выражением. Аргумент eflagsможет иметь нулевое значение или быть любой комбинацией перечисленных ниже значений, объединенных битовым "ИЛИ".

REG_NOTBOL Первый символ строки не будет соответствовать символу ^. Любой символ, следующий за символом новой строки, будет соответствовать при том условии, что в вызове функции regcomp()будет задано значение REG_NEWLINE.
REG_NOTEOL Последний символ строки не будет соответствовать символу $. Любой символ, предшествующий символу новой строки, будет соответствовать символу $при том условии, что в вызове функции regcomp()будет задано значение REG_NEWLINE.

Массив структур regmatch_tиспользуется для представления местоположения подвыражений в регулярном выражении.

#include

typedef struct {

regoff_t rm_so; /* индекс байта в строке в начале сопоставления*/

regoff_t rm_eo; /* индекс байта в строке в конце сопоставления*/

} regmatch_t;

Первый элемент regmatch_tописывает всю совпавшую строку; обратите внимание, что вся эта строка содержит любой символ начала строки, включая хвостовой символ новой строки, независимо от того, задано ли значение REG_NEWLINE.

Следующие элементы массива хранят подвыражения, заключенные в скобки, в том порядке, в котором они присутствуют в регулярном выражении, в порядке расположения открывающих скобок. (В коде на языке С элемент i эквивалентен выражению замены \ i в программах sedили awk.) В несовпадающих подвыражениях член regmatch_t.rm_soимеет значение -1.

В следующем коде производится сопоставление строки с регулярным выражением, содержащим подвыражения. После сопоставления на экран выводятся все совпавшие подвыражения.

1: /* match.с */

2:

3: #include

4: #include

5: #include

6: #include

7: #include

8: #include

9:

10: void do_regerror(int errcode, const regex_t *preg) {

11: char *errbuf;

12: size_t errbuf_size;

13:

14: errbuf_size = regerror(errcode, preg, NULL, 0);

15: errbuf = alloca(errbuf_size);

16: if (!errbuf) {

17: perror("alloca");

18: return;

19: }

20:

21: regerror(errcode, preg, errbuf, errbuf_size);

22: fprintf(stderr, "%s\n", errbuf);

23: }

24:

25: int main() {

26:

27: regex_t p;

28: regmatch_t *pmatch;

29: int rerr;

30: char *regex = "(^(.*[^\\])#.*$)|(^[^#]+$)";

31: char string[BUFSIZ+1];

32: int i;

33:

34: if ((rerr = regcomp(&p, regex, REG_EXTENDED | REG_NEWLINE))) {

35: do_regerror(rerr, &p);

36: }

37:

38: pmatch = alloca(sizeof(regmatch_t) * (p.re_nsub+1));

39: if (!pmatch) {

40: perror("alloca");

41: }

42:

43: printf("Введите строку: ");

44: fgets(string, sizeof(string), stdin);

45:

46: if ((rerr = regexec(&p, string, p.re_nsub+1, pmatch, 0))) {

47: if (rerr == REG_NOMATCH) {

48: /* эту ситуацию может обработать regerror,

49: * но зачастую она обрабатывается особым образом

50: */

51: printf("Строка не совпадает с %s\n", regex);

52: } else {

53: do_regerror(rerr, &p);

54: }

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «Разработка приложений в среде Linux. Второе издание»

Представляем Вашему вниманию похожие книги на «Разработка приложений в среде Linux. Второе издание» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Геше Джампа Тинлей - Лоджонг (второе издание)
Геше Джампа Тинлей
Алексей Филатов - Люди «А». Второе издание
Алексей Филатов
Отзывы о книге «Разработка приложений в среде Linux. Второе издание»

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

x