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

Мэтью Нейл

Шрифт:

14. Как всегда, начните с имеющих смысл проверок:

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

 if (!cd_catalog_ptr || !first_call_ptr) return (entry_to_return);

 if (strlen(cd_catalog_ptr) >= CAT_CAT_LEN) return (entry_to_return);

 /* Защита от пропуска вызова с *first_call_ptr, равным true */

 if (local_first_call) {

local_first_call = 0;

*first_call_ptr = 1;

 }

15. Если эта функция была вызвана с параметром

*first_call_ptr
, равным
true
, вы должны продолжить (или заново начать) поиск от начала базы данных. Если
*first_call_ptr
не равен
true
, просто переходите к следующему ключу в базе данных:

 if (*first_call_ptr) {

*first_call_ptr = 0;

local_key_datum = dbm_firstkey(cdc_dbm_ptr);

 } else {

local_key_datum = dbm_nextkey(cdc_dbm_ptr);

 }

 do {

if (local_key_datum.dptr != NULL) {

/* Элемент был найден */

local_data_datum = dbm_fetch(cdc_dhm_ptr, local_key_datum);

if (local_data_datum.dptr) {

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

16. Функция поиска включает очень простую проверку, позволяющую увидеть, входит ли строка поиска в текущий элемент каталога.

/* Проверяет, входит ли строка в текущий элемент */

if (!strstr(entry_to_return.catalog, cd_catalog_ptr)) {

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

local_key_datum = dbm_nextkey(cdc_dbm_ptr);

}

}

}

 } while (local_key_datum.dptr && local_data_datum.dptr &&

(entry_to_return.catalog[0] == '\0'));

 return (entry_to_return);

} /* search_cdc_entry */

Теперь вы готовы собрать все вместе с помощью следующего make-файла или файла сборки. Не слишком углубляйтесь в него сейчас, поскольку мы обсудим его работу в следующей главе. В данный момент просто наберите его и сохраните как Makefile.

all: application

INCLUDE=/usr/include/gdbm LIBS=gdbm

# В некоторых дистрибутивах вам, возможно, придется изменить предыдущую

# строку, чтобы включить библиотеку совместимости, как показано далее

# LIBS= -lgdbm_compat -lgdbm

CFIAGS=

app_ui.о: app_ui.с cd_data.h

 gcc $(CFLAGS) -c app_ui.c

access.о: access.с cd_data.h

 gcc $(CFLAGS) -I$(INCLUDE) -c access.с

application: app_ui.o access.о

 gcc $(CFLAGS) -o application app_ui.o access.о -l$(LIBS)

clean:

 rm -f application *.o

nodbmfiles:

 rm -f *.dir *.pag

Для компиляции вашего нового приложения управления коллекцией компакт- дисков наберите следующую команду в командной строке:

$ make

Если все пройдет нормально, выполняемый файл application будет откомпилирован и помещен в текущий каталог.

Резюме

В этой главе вы узнали о трех аспектах управления данными. Сначала вы познакомились с системой управления памятью в ОС Linux, и убедились в простоте ее применения, несмотря на то, что на низком уровне в нее включена реализация виртуальной памяти с подкачкой страниц. Вы также увидели, как она защищает операционную систему и другие программы от попыток несанкционированного доступа к памяти.

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

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

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

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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