Основы программирования в Linux - Мэтью Нейл
- Дата:08.09.2024
- Категория: Компьютеры и Интернет / Интернет
- Название: Основы программирования в Linux
- Автор: Мэтью Нейл
- Просмотров:0
- Комментариев:0
Шрифт:
Интервал:
Закладка:
}
return (entry_to_return);
} /* 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, ' ', 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, ' ', 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, ' ', 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, ' ', 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, ' ', 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;
local_data_datum.dsize = sizeof(entry_to_add);
result = dbm_store(cdt_dbm_ptr, local_key_datum, local_data_datum, DBM_REPLACE);
/* dbm_store() применяет 0 в случае успешного завершения
и отрицательные числа для обозначения ошибок */
if (result == 0) return (1);
return (0);
}
11. Если вы можете вставлять строки, было бы лучше, если вы могли бы и удалять их. Следующая функция удаляет элементы каталога;
int del_cdc_entry(const char *cd_catalog_ptr) {
char key_to_del[CAT_CAT_LEN +1];
datum local_key_datum;
int result;
if (!cdc_dbm_ptr || !cdt_dbm_ptr) return (0);
if (strlen(cd_catalog_ptr) >= CAT_CAT_LEN) return (0);
memset(&key_to_del, ' ', sizeof(key_to_del));
strcpy(key_to_del, cd_catalog_ptr);
local_key_datum.dptr = (void*)key_to_del;
local_key_datum.dsize = sizeof(key_to_del);
result = dbm_delete(cdc_dbm_ptr, local_key_datum);
/* dbm_delete() применяет 0 в случае успешного завершения */
if (result == 0) return (1);
return (0);
}
12. Далее приведена аналогичная функция для удаления дорожки. Помните о том, что ключ дорожки — это сложный индекс, состоящий из строки, принадлежащей элементу каталога, и номера дорожки:
- Вопросы истории: UNIX, Linux, BSD и другие - Федорчук Алексей Викторович "alv" - Прочая околокомпьтерная литература
- Linux Mint и его Cinnamon. Очерки применителя - Алексей Федорчук - Программное обеспечение
- Язык программирования C++. Пятое издание - Стенли Липпман - Программирование
- Аквариум. (Новое издание, исправленное и переработанное) - Виктор Суворов (Резун) - Шпионский детектив
- Интерфейс: новые направления в проектировании компьютерных систем - Джефф Раскин - Техническая литература