Основы программирования в Linux
Основы программирования в Linux читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Эту функцию применяют для ввода данных в базу данных. Как упоминалось ранее, все данные должны сохраняться с уникальным индексом. Для определения данных, которые вы хотите сохранить, и индекса, используемого для ссылки на них, следует задать два типа datum: один для ссылки на индекс, а другой — на реальные данные. Последний параметр
store_modedbm_insertdbm_storedbm_replacedbm_storedbm_storeПодпрограмма
dbm_fetchdbm_opendatumdatumdatumdptrdsizedptrnullВажно помнить, что функция
dbm_fetchdatumЭта подпрограмма закрывает базу данных, открытую функцией
dbm_openDBMdbm_openА теперь выполните упражнение 7.12.
Познакомившись с основными функциями базы данных dbm, теперь вы знаете, как написать вашу первую программу для работы с dbm (dbm1.c). В этой программе применяется структура, названная
test_data1. Первыми представлены файлы
#include#definemaintest_data#include <unistd.h>#include <stdlib.h>#include <stdio.h>#include <fcntl.h>#include <ndbm.h>/* В некоторых системах вам нужно заменить вышестоящую строку строкой #include <gdbm-ndbm.h>*/#include <string.h>#define TEST_DB_FILE "/tmp/dbm1_test"#define ITEMS_USED 3struct test_data { char misc_chars[15]; int any_integer; char more_chars[21];};int main() {2. В функции
mainitems_to_storeitems_receivedkeydatum struct test_data items_to_store[ITEMS_USED]; struct test_data item_retrieved; char key_to_use[20]; int i, result; datum key_datum; datum data_datum; DBM *dbm_ptr;3. Объявив указатель на структуру типа
DBM dbm_ptr = dbm_open(TEST_DB_FILE, O_RDWR | O_CREAT, 0666); if (!dbm_ptr) { fprintf (stderr, "Failed to open databasen"); exit(EXIT_FAILURE); }4. Теперь добавьте данные в структуру
items_to_store memset(items_to_store, ' ', sizeof(items_to_store)); strcpy(items_to_store[0].misc_chars, "First! "); items_to_store[0].any_integer = 47; strcpy(items_to_store[0].more_chars, "foo"); strcpy(items_to_store[1].misc_chars, "bar"); items_to_store[1].any_integer = 13; strcpy(items_to_store[1].more_chars, "unlucky? "); strcpy(items_to_store[2].misc_chars, "Third"); items_to_store[2].any_integer = 3; strcpy(items_to_store[2].more_chars, "baz");5. Для каждого элемента необходимо сформировать ключ для будущих ссылок в виде первой буквы каждой строки и целого числа. Этот ключ затем будет обозначен
key_datumdata_datumitems_to_store for (i = 0; i < ITEMS_USED; i++) { sprintf(key_to_use, "%c%c%d", items_to_store[i].misc_chars[0], items_to_store[i].more_chars[0], items_to_store[i].any_integer); key_datum.dptr = (void*)key_to_use; key_datum.dsize = strlen(key to_use);
