Книга: Основы программирования в Linux
Приложение для работы с базой данных компакт-дисков
Теперь, зная, как применять именованные каналы для реализации простой клиент-серверной системы, вы можете пересмотреть приложение для работы с базой данных компакт-дисков и соответствующим образом переработать его. Вы включите в него также некоторую обработку сигналов, позволяющую выполнить кое-какие действия по наведению порядка при прерывании процесса. Будет использоваться более ранняя версия приложения с dbm и интерфейсом командной строки, чтобы исходный текст программы был максимально простым и понятным.
Прежде чем подробно рассматривать эту новую версию, необходимо откомпилировать приложение. Если вы взяли исходный код с Web-сайта, примените make-файл для его компиляции и получения серверной и клиентской программ.
Примечание
Как было показано ранее в главе 7, в различных дистрибутивах файлы dbm именуются и устанавливаются немного по-разному. Если предоставленные файлы не компилируются в вашем дистрибутиве, вернитесь к главе 7 и поищите сведения об именах и местонахождении файлов dbm.
Выполнение команды server -i
позволяет программе инициализировать новую базу данных компакт-дисков.
Нет нужды говорить о том, что клиент не выполнится, пока сервер не установится и не запустится. Далее приведен make-файл, показывающий, как совмещаются программы:
all: server client
CC=cc
CFLAGS= -pedantic -Wall
# Для отладки удалите знак комментария в следующей строке
# DFLAGS=-DDEBUG_TRACE=1 -g
# Где и какую версию dbm мы применяем.
# Предполагается, что gdbm предустановлена в стандартном месте, но мы
# собираемся применять подпрограммы, совместимые с gdbrn, которые
# заставляют ее эмулировать ndbm. Делается это потому, что ndbm — 'самая
# стандартная' из версий dbm. Возможно, вам потребуется внести изменения
# в соответствии с вашим дистрибутивом.
DBM_INC_PATH=/usr/include/gdbm
DBM_LIB_PATH=/usr/lib
DBM_LIB_FILE=-lgdbm
# В некоторых дистрибутивах может понадобиться изменить предыдущую
# строку, чтобы включить библиотеку совместимости, как показано далее.
# DBM_LIB_FILE=-lgdbm_compat -lgdbm
.с.о:
$(CC) $(CFLAGS) -I$(DBM_INC_PATH) $(DFLAGS) -с $<
app_ui.o: app_ui.c cd_data.h
cd_dbm.o: cd_dbm.c cd_data.h
client_f.o: client_f.c cd_data.h cliserv.h
pipe_imp.o: pipe_imp.c cd_data.h cliserv.h
server.о: server.с cd_data.h cliserv.h
client: app_ui.o clientif.o pipe_imp.o
$(CC) -o client $(DFLAGS) app_ui.о clientif.o pipe_imp.o
server: server.о cd_dbm.o pipe_imp.o
$(CC) -o server -L$(DBM_LIB_PATH) $(DFLAGS) server.о cd_dbm.o pipe_imp.o -l$(DBM_LIB_FILE)
clean:
rm -f server client_app *.o *~
- Глава 17 Программирование в KDE с помощью Qt
- Приложение для работы с коллекцией компакт-дисков
- Глава 14 Семафоры, совместно используемая память и очереди сообщений
- Приложение, управляющее коллекцией компакт-дисков
- Глава 16 Программирование в GNOME с помощью GTK+
- Глава 13 Связь между процессами: каналы
- Приложение для работы с базой данных компакт-дисков с использованием KDE