Основы программирования в Linux
Основы программирования в Linux читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
} return (entry_to_return);} /* get_cdc_entry */8. Было бы неплохо иметь возможность получать также и одиночный элемент-дорожку, именно этим занимается следующая функция аналогично функции
get_cdc_entrycdt_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_entryint 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_entryint 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. Далее приведена аналогичная функция для удаления дорожки. Помните о том, что ключ дорожки — это сложный индекс, состоящий из строки, принадлежащей элементу каталога, и номера дорожки:
