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

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

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

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

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

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

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

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

Интервал:

Закладка:

Сделать

55: } else {

56: /* сопоставление закончено */

57: printf("Строка совпадает с регулярным выражением %s\n", regex);

58: for (i = 0; i <= p.re_nsub; i++) {

59: /* вывод на экран совпавшей части (частей) строки */

60: if (pmatch[i].rm_so != -1) {

61: char *submatch;

62: size_t matchlen = pmatch[i].rm_eo - pmatch[i].rm_so;

63: submatch = malloc(matchlen+1);

64: strncpy(submatch, string+pmatch[i].rm_so,

65: matchlen);

66: submatch[matchlen] = '\0';

67: printf("совпавшее подвыражение %d: %s\n", i,

68: submatch);

69: free(submatch);

70: } else {

71: printf ("нет совпадения с подвыражением %d\n", i);

72: }

73: }

74: }

75: exit(0);

76: }

В примере регулярного выражения из программы match.симеется три подвыражения. Первое из них представляет собой всю строку, содержащую текст, за которым следует символ комментария, вторым является текст в строке, предшествующей символу комментария, а третье представляет всю строку без символа комментария. Для строки, в начале которой содержится комментарий, элементу rm_soво втором и третьем элементе из массива pmatch[]присвоено значение -1. Для строки, в начале которой содержится комментарий, значение -1присваивается первому и второму элементу; для строки, не содержащей символы комментария, второму и третьему элементу присваивается значение -1.

Каждый раз после завершения работы с компилированным регулярным выражением его необходимо освободить, чтобы избежать утечек памяти. Для освобождения памяти необходимо использовать функцию regfree(), но не free():

#include

void regfree(regex_t *preg);

В стандарте POSIX четко не сказано, следует ли использовать функцию regfree()каждый раз при вызове функции regcomp(), или же только после того, как вы в последний раз вызывали функцию regcomp()в одной структуре regex_t. Таким образом, чтобы избежать утечек памяти, в промежутках между использованием структур regex_tнеобходимо вызывать функцию regfree().

Всякий раз когда функция regcomp()или regex()возвращает ненулевой результат, функция regerror()может предоставить подробное сообщение, в котором будет указано, в чем состоит ошибка. Она записывает по возможности все сообщение об ошибке в буфер и возвращает размер всего сообщения. Поскольку вы заранее не знаете, какой размер будет иметь сообщение, то сначала вам необходимо узнать его размер, а затем распределить и использовать буфер, как показано в следующем далее примере кода. Поскольку этот вариант обработки ошибок быстро становится устаревшим, и вам придется включать его как минимум дважды (один раз после функции regcomp()и один раз после функции regex()), мы советуем вам написать код собственной оболочки функции regerror(), как показано в строке 10 из листинга math.с.

23.2.3. Простая утилита grep

grepявляется популярной утилитой, определенной в стандарте POSIX, которая предлагает возможности поиска регулярного выражения в текстовых файлах. Ниже показана простая (не соответствующая стандарту POSIX) версия утилиты grep, реализованная с помощью функций стандартного регулярного выражения.

1: /* grep.с */

2:

3: #include

4: #include

5: #include

6: #include

7: #include

8: #include

9: #include

10:

11: #define MODE_REGEXP 1

12: #define MODE_EXTENDED 2

13: #define MODE_FIXED 3

14:

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

16: char *errbuf;

17: size_t errbuf_size;

18:

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

20: errbuf = alloca(errbuf_size);

21: if (!errbuf) {

22: perror("alloca");

23: return;

24: }

25:

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

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

28: }

29:

30: int scanFile(FILE * f, int mode, const void * pattern,

31: int ignoreCase, const char * fileName,

32: int * maxCountPtr) {

33: long lineLength;

34: char * line;

35: int match;

36: int rc;

37: char * chptr;

38: char * prefix = "";

39:

40: if (fileName) {

41: prefix = alloca(strlen(fileName) + 4);

42: sprintf(prefix, "%s: ", fileName);

43: }

44:

45: lineLength = sysconf(_SC_LINE_MAX);

46: line = alloca(lineLength);

47:

48: while (fgets(line, lineLength, f) && (*maxCountPtr)) {

49: /* если у нас не будет завершающего символа '\n'

50: то мы не сможем получить всю строку целиком */

51: if (line [strlen (line) -1] != '\n') {

52: fprintf(stderr, " %s line слишком длинная\n", prefix);

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

Интервал:

Закладка:

Сделать

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

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


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

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

x