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

Тут можно читать онлайн Майкл Джонсон - Разработка приложений в среде Linux. Второе издание - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-osnet, издательство Вильямс, год 2007. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Разработка приложений в среде Linux. Второе издание
  • Автор:
  • Жанр:
  • Издательство:
    Вильямс
  • Год:
    2007
  • Город:
    Москва
  • ISBN:
    978-5-8459-1143-8
  • Рейтинг:
    3.8/5. Голосов: 101
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

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

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

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

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

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

Разработка приложений в среде Linux. Второе издание - читать книгу онлайн бесплатно, автор Майкл Джонсон
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

25.4.2. Удаление записей

Удаление записей из базы данных осуществляется путем вызова функции dpout()и передачи ей ключа, данные которого необходимо удалить.

int dpout(DEPOT * depot, const char * key, int keySize);

Заданный ключ и связанные с ним данные удаляются из базы, после чего возвращается ненулевое значение. Если для заданного ключа данные не существовали, возвращается нулевое значение. Как и для всех остальных функций, принимающих ключ, если параметр keySizeравен -1, то функция dpout()использует strlen()для определения длины ключа.

25.5. Пример

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

Флаг добавляет запись в базу данных. Если будет указан флаг -f, то любой существующий элемент будет заменен новыми данными. Следующий параметр представляет собой значение ключа, которое необходимо использовать, а последний параметр — собственно данные (номер телефона).

Флаг -qзапрашивает в базе данных определенный ключ, который должен быть представлен другим указанным параметром. Записи удаляются из базы данных с помощью флага -d, который принимает значение ключа для удаления в другом параметре.

Если задать флаг -l, то будут перечислены все пары "ключ-значение", имеющиеся в базе данных.

Вот как выглядят пример использования phones.

$ ./phones -a Erik 374-5876

$ ./phones -a Michael 642-4235

$ ./phones -a Larry 527-7976

$ ./phones -a Barbara 227-2272

$ ./phones -q Larry

Larry 527-7976

$ ./phones -l

Larry 527-7976

Erik 374-5876

Michael 642-4235

Barbara 227-2272

$ ./phones -d Michael

$ ./phones -l

Larry 527-7976

Erik 374-5876

Barbara 227-2272

Эта программа выполняет определенные полезные действия, состоит менее чем из 200 строк исходного кода, и с успехом может применяться для работы с большим количеством пар "ключ-значение", четко раскрывая назначение библиотеки qdbm.

1: /* phones.с */

2:

3: /* Программа реализует очень простую базу данных телефонных номеров.

4: Всю необходимую информацию по ее использованию можно найти в тексте. */

5:

6: #include

7: #include

8: #include

9: #include

10: #include

11: #include

12: #include

13: #include

14:

15: void usage(void) {

16: fprintf(stderr, "использование: phones -a [-f] <���имя> <���телефон>\n");

17: fprintf(stderr, " -d <���имя>\n");

18: fprintf(stderr, " -q <���имя>\n");

19: fprintf(stderr, " -l\n");

20: exit(1);

21: }

22:

23: /* Открыть базу данных $НОМЕ/.phonedb. Если writeable имеет ненулевое

24: значение, база данных открывается для обновления. Если writeable

25: равен 0, база данных открывается только для чтения. */

26: DEPOT * openDatabase(int writeable) {

27: DEPOT * dp;

28: char * filename;

29: int flags;

30:

31: /* Установить режим открытия */

32: if (writeable) {

33: flags = DP_OWRITER | DP_OCREAT;

34: } else {

35: flags = DP_OREADER;

36: }

37:

38: filename = alloca(strlen(getenv("HOME")) + 20);

39: strcpy(filename, getenv("HOME"));

40: strcat(filename, "/.phonedb");

41:

42: dp = dpopen(filename, flags, 0);

43: if (!dp) {

44: fprintf(stderr, "сбой при открытии %s: %s\n", filename,

45: dperrmsg(dpecode));

46: return NULL;

47: }

48:

49: return dp;

50: }

51:

52: /* добавить новую запись в базу данных; произвести

53: прямой разбор аргументов командной строки */

54: int addRecord(int argc, char ** argv) {

55: DEPOT * dp;

56: char * name, * phone;

57: int rc = 0;

58: int overwrite = 0;

59: int flag;

60:

61: /* проверить параметры; -f означает перезапись

62: существующего элемента, а имя и номер телефона

63: должны оставаться неизмененными */

64: if (!argc) usage();

65: if (!strcmp(argv[0], " -f")) {

66: overwrite = 1;

67: argc--, argv++;

68: }

69:

70: if (argc! = 2) usage();

71:

72: name = argv[0];

73: phone = argv[1];

74:

75: /* открыть базу данных для записи */

76: if (!(dp = openDatabase(1))) return 1;

77:

78: /* если не перезаписывается существующий элемент,

79: проверить, не используется ли уже это имя */

80: if (!overwrite) {

81: flag = DP_DKEEP;

82: } else {

83: flag = DP_DOVER;

84: }

85:

86: if (!dpput(dp, name, -1, phone, -1, flag)) {

87: if (dpecode == DP_EKEEP) {

88: fprintf(stderr, "%s уже существует\n", name);

89: } else {

90: fprintf(stderr, "сбой записи: %s\n", dperrmsg(dpecode));

91: }

92:

93: rc = 1;

94: }

95:

96: dpclose(dp);

97:

98: return rc;

99: }

100:

101: /* найти имя и вывести номер телефона, с которым оно связано;

102: напрямую разобрать командную строку */

103: int queryRecord(int argc, char ** argv) {

104: DEPOT * dp;

105: int rc;

106: char * phone;

107:

108: /* ожидается только один аргумент, имя для поиска */

109: if (argc != 1) usage();

110:

111: /* открыть базу данных для чтения */

112: if (!(dp = openDatabase(0))) return 1;

113:

114: phone = dpget(dp, argv[0], -1, 0, -1, NULL);

115: if (!phone) {

116: if (dpecode == DP_ENOITEM)

117: fprintf(stderr, "%s не существует\n", argv[0]);

118: else

119: fprintf(stderr, "ошибка чтения базы данных: %s\n"

120: dperrmsg(dpecode));

121:

122: rc = 1;

123: } else {

124: printf("%s %s\n", argv[0], (char *) phone);

125: rc = 0;

126: }

127:

128: dpclose(dp);

129:

130: return rc;

131: }

132:

133: /* удалить определенную запись; имя передается в качестве

134: аргумента командной строки */

135: int delRecord(int argc, char ** argv) {

136: DEPOT * dp;

137: int rc;

138:

139: /* ожидается только один аргумент */

140: if (argc != 1) usage();

141:

142: /* открыть базу данных для обновления */

143: if (!(dp = openDatabase(1))) return 1;

144:

145: if (!(rc = dpout(dp, argv[0], -1))) {

146: if (dpecode == DP_ENOITEM)

147: fprintf(stderr, "%s не существует\n", argv[0]);

148: else

149: fprintf(stderr, "ошибка удаления элемента: %s\n",

150: dperrmsg(dpecode));

151:

152: rc = 1;

153: }

154:

155: dpclose(dp);

156:

157: return rc;

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

Интервал:

Закладка:

Сделать


Майкл Джонсон читать все книги автора по порядку

Майкл Джонсон - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




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


Отзывы читателей о книге Разработка приложений в среде Linux. Второе издание, автор: Майкл Джонсон. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x