Читаем Основы программирования в Linux полностью

/* В некоторых дистрибутивах файл в предыдущей строке может быть придется заменить на gdbm-ndbm.h */

#include "cd_data.h"

#define CDC_FILE_BASE "cdc_data"

#define CDT_FILE_BASE "cdt_data"

#define CDC_FILE_DIR "cdc_data.dir"

#define CDC_FILE_PAG "cdc_data.pag"

#define CDT_FILE_DIR "cdt_data.dir"

#define CDT_FILE_PAG "cdt_data.pag"

2. Используйте эти две переменные области действия файла для отслеживания текущей базы данных:

static DBM *cdc_dbm_ptr = NULL;

static DBM *cdt_dbm_ptr = NULL;

3. По умолчанию функция database_initialize открывает существующую базу данных, но передав ненулевой (т.е. true) параметр new_database, вы можете заставить ее создать новую (пустую) базу данных, при этом существующая база данных удаляется. Если база данных успешно инициализирована, также инициализированы и два ее указателя, указывающие на то, что база данных открыта.

int database_initialize(const int new_database) {

 int open_mode = O_CREAT | O_RDWR;

 /* Если открыта какая-либо имеющаяся база данных, закрывает ее */

 if (cdc_dbm_ptr) dbm_close(cdc_dbm_ptr);

 if (cdt_dbm_ptr) dbm_close(cdt_dbm_ptr);

 if (new_database) {

  /* Удаляет старые файлы */

  (void)unlink(CDC_FILE_PAG);

  (void)unlink(CDC_FILE_DIR);

  (void)unlink(CDT_FILE_PAG);

  (void)unlink(CDT_FILE_DIR);

 }

 /* Открывает несколько новых файлов, создавая их при необходимости */

 cdc_dbm_ptr = dbm_open(CDC_FILE_BASE, open_mode, 0644);

 cdt_dbm_ptr = dbm_open(CDT_FILE_BASE, open_mode, 0644);

 if (!cdc_dbm_ptr || !cdt_dbm_ptr) {

  fprintf(stderr, "Unable to create database\n");

  cdc_dbm_ptr = cdt_dbm_ptr = NULL;

  return (0);

 }

 return (1);

}

4. Функция database_close просто закрывает базу данных, если она была открыта и устанавливает указатели базы данных в null, чтобы показать, что нет открытой базы данных:

void database_close(void) {

 if (cdc_dbm_ptr) dbm_close(cdc_dbm_ptr);

 if (cdt_dbm_ptr) dbm_close(cdt_dbm_ptr);

 cdc_dbm_ptr = cdt_dbm_ptr = NULL;

}

5. Далее у вас появляется функция, извлекающая единственный элемент каталога, когда передан указатель на строку текста из каталога. Если элемент не найден, у возвращенных данных пустое поле каталога:

cdc_entry get_cdc_entry(const char *cd_catalog_ptr) {

 cdc_entry entry_to_return;

 char entry_to_find[CAT_CAT_LEN + 1];

 datum local data datum;

 datum local_key_datum;

 memset(&entry_to_return, '\0', sizeof(entry_to_return));

6. Начните с некоторых имеющих смысл проверок, чтобы убедиться в том, что база данных открыта, и вы передали приемлемые параметры, т.е. ключ поиска содержит только допустимую строку и значения null:

 if (!cdc_dbm_ptr || !cdt_dbm_ptr) return (entry_to_return);

 if (!cd_catalog_ptr) return (entry_to_return);

 if (strlen(cd_catalog_ptr) >= CAT_CAT_LEN) return (entry_to_return);

 memset(&entry_to_find, '\0', sizeof(entry_to_find));

 strcpy(entry_to_find, cd_catalog_ptr);

7. Задайте структуру datum, нужную функциям базы данных dbm, и используйте функцию dbm_fetch для извлечения данных. Если не извлечены никакие данные, вы возвращаете пустую структуру entry_to_return, которая была инициализирована ранее:

 local_key_datum.dptr = (void *) entry_to_find;

 local_key_datum.dsize = sizeof(entry_to_find);

Перейти на страницу:

Похожие книги

Основы программирования в Linux
Основы программирования в Linux

В четвертом издании популярного руководства даны основы программирования в операционной системе Linux. Рассмотрены: использование библиотек C/C++ и стан­дартных средств разработки, организация системных вызовов, файловый ввод/вывод, взаимодействие процессов, программирование средствами командной оболочки, создание графических пользовательских интерфейсов с помощью инструментальных средств GTK+ или Qt, применение сокетов и др. Описана компиляция программ, их компоновка c библиотеками и работа с терминальным вводом/выводом. Даны приемы написания приложений в средах GNOME® и KDE®, хранения данных с использованием СУБД MySQL® и отладки программ. Книга хорошо структурирована, что делает обучение легким и быстрым. Для начинающих Linux-программистов

Нейл Мэтью , Ричард Стоунс , Татьяна Коротяева

ОС и Сети / Программирование / Книги по IT
1001 совет по обустройству компьютера
1001 совет по обустройству компьютера

В книге собраны и обобщены советы по решению различных проблем, которые рано или поздно возникают при эксплуатации как экономичных нетбуков, так и современных настольных моделей. Все приведенные рецепты опробованы на практике и разбиты по темам: аппаратные средства персональных компьютеров, компьютерные сети и подключение к Интернету, установка, настройка и ремонт ОС Windows, работа в Интернете, защита от вирусов. Рассмотрены не только готовые решения внезапно возникающих проблем, но и ответы на многие вопросы, которые возникают еще до покупки компьютера. Приведен необходимый минимум технических сведений, позволяющий принять осознанное решение.Компакт-диск прилагается только к печатному изданию книги.

Юрий Всеволодович Ревич

Программирование, программы, базы данных / Интернет / Компьютерное «железо» / ОС и Сети / Программное обеспечение / Книги по IT