Основы программирования в Linux
Основы программирования в Linux читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Эту функцию применяют для ввода данных в базу данных. Как упоминалось ранее, все данные должны сохраняться с уникальным индексом. Для определения данных, которые вы хотите сохранить, и индекса, используемого для ссылки на них, следует задать два типа datum: один для ссылки на индекс, а другой — на реальные данные. Последний параметр
store_mode
dbm_insert
dbm_store
dbm_replace
dbm_store
dbm_store
Подпрограмма
dbm_fetch
dbm_open
datum
datum
datum
dptr
dsize
dptr
null
Важно помнить, что функция
dbm_fetch
datum
Эта подпрограмма закрывает базу данных, открытую функцией
dbm_open
DBM
dbm_open
А теперь выполните упражнение 7.12.
Познакомившись с основными функциями базы данных dbm, теперь вы знаете, как написать вашу первую программу для работы с dbm (dbm1.c). В этой программе применяется структура, названная
test_data
1. Первыми представлены файлы
#include
#define
main
test_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 3
struct test_data {
char misc_chars[15];
int any_integer;
char more_chars[21];
};
int main() {
2. В функции
main
items_to_store
items_received
key
datum
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_datum
data_datum
items_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);