Чтение онлайн

на главную - закладки

Жанры

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

Троан Эрик В.

Шрифт:

$ ./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 <alloca.h>

7: #include <depot.h>

8: #include <errno.h>

9: #include <fcntl.h>

 10: #include <stdio.h>

 11: #include <stdlib.h>

 12: #include <string.h>

 13: #include <unistd.h>

 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:

Поделиться:
Популярные книги

Как я строил магическую империю 4

Зубов Константин
4. Как я строил магическую империю
Фантастика:
боевая фантастика
постапокалипсис
аниме
фантастика: прочее
фэнтези
5.00
рейтинг книги
Как я строил магическую империю 4

Безумный Макс. Поручик Империи

Ланцов Михаил Алексеевич
1. Безумный Макс
Фантастика:
героическая фантастика
альтернативная история
7.64
рейтинг книги
Безумный Макс. Поручик Империи

Попаданка 3

Ахминеева Нина
3. Двойная звезда
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Попаданка 3

Муж на сдачу

Зика Натаэль
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Муж на сдачу

Призыватель нулевого ранга. Том 3

Дубов Дмитрий
3. Эпоха Гардара
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Призыватель нулевого ранга. Том 3

На границе империй. Том 10. Часть 5

INDIGO
23. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 5

Адвокат

Константинов Андрей Дмитриевич
1. Бандитский Петербург
Детективы:
боевики
8.00
рейтинг книги
Адвокат

На границе империй. Том 7

INDIGO
7. Фортуна дама переменчивая
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
6.75
рейтинг книги
На границе империй. Том 7

Здравствуй, 1985-й

Иванов Дмитрий
2. Девяностые
Фантастика:
альтернативная история
5.25
рейтинг книги
Здравствуй, 1985-й

О, Путник!

Арбеков Александр Анатольевич
1. Квинтет. Миры
Фантастика:
социально-философская фантастика
5.00
рейтинг книги
О, Путник!

Чужбина

Седой Василий
2. Дворянская кровь
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Чужбина

Бестужев. Служба Государевой Безопасности. Книга четвертая

Измайлов Сергей
4. Граф Бестужев
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Бестужев. Служба Государевой Безопасности. Книга четвертая

Локки 5. Потомок бога

Решетов Евгений Валерьевич
5. Локки
Фантастика:
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Локки 5. Потомок бога

На границе империй. Том 10. Часть 4

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 4