Вход/Регистрация
Основы программирования в Linux
вернуться

Мэтью Нейл

Шрифт:

} /* get_cdc_entry */

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

get_cdc_entry
, но с указателем на строку каталога и номер дорожки в качестве параметров:

cdt_entry get_cdt_entry(const char *cd_catalog_ptr, const int track_no) {

 cdt_entry entry_to_return;

 char entry_to_find[CAT_CAT_LEN + 10];

 datum local_data_datum;

 datum local_key_datum;

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

 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));

 sprintf(entry_to_find, "%s %d", cd_catalog_ptr, track_no);

 local_key_datum.dptr = (void*)entry_to_find;

 local_key_datum.dsize = sizeof(entry_to_find);

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

 local_data_datum = dbm_fetch(cdt_dbm_ptr, local_key_datum);

 if (local_data_datum.dptr) {

memcpy(&entry_to_return, (char*)local_data_datum.dptr, local_data_datum.dsize);

 }

 return (entry_to_return);

}

9. Следующая функция

add_cdc_entry
добавляет новый элемент каталога:

int add_cdc_entry(const cdc_entry entry_to_add) {

 char key_to_add[CAT_CAT_LEN + 1];

 datum local_data_datum;

 datum local_key_datum;

 int result;

 /* Проверяет инициализацию базы данных и корректность параметров */

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

 if (strlen(entry_to_add.catalog) >= CAT_CAT_LEN) return (0);

 /* Гарантирует включение в ключ поиска только корректной строки

и значений null */

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

 strcpy(key_to_add, entry_to_add.catalog);

 local_key_datum.dptr = (void*)key_to_add;

 local_key_datum.dsize = sizeof(key_to_add);

 local_data_datum.dptr = (void*)&entry_to_add;

 local_data_datum.dsize = sizeof(entry_to_add);

 result = dbm_store(cdc_dbm_ptr, local_key_datum, local_data_datum, DBM_REPLACE);

 /* dbm_store применяет 0 для успешного завершения */

 if (result == 0) return (1);

 return (0);

}

10. Функция

add_cdt_entry
добавляет новый элемент-дорожку. Ключ доступа — это комбинация строки из каталога и номера дорожки:

int add_cdt_entry(const cdt_entry entry_to_add) {

 char key_to_add[CAT_CAT_LEN + 10];

 datum local_data_datum;

 datum local_key_datum;

 int result;

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

 if (strlen(entry_to_add.catalog) >= CAT_CAT_LEN) return (0);

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

 sprintf(key_to_add, "%s %d", entry_to_add.catalog, entry_to_add.track_no);

 local_key_datum.dptr = (void*)key_to_add;

 local_key_datum.dsize = sizeof(key_to_add);

 local_data_daturn.dptr = (void*)&entry_to_add;

  • Читать дальше
  • 1
  • ...
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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