Основы программирования в Linux
Основы программирования в Linux читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
1. В этом файле реализовано девять функций для работы с базой данных, объявленных в файле cd_data.h. Делает он это передачей запросов серверу и затем возвратом ответа сервера из функции, действуя как посредник. Файл начинается с файлов
#include#define _POSIX_SOURCE#include <unistd.h>#include <stdlib.h>#include <stdio.h>#include <fcntl.h>#include <limits.h>#include <sys/types.h>#include <sys/stat.h>#include "cd_data.h"#include "cliserv.h"2. Статическая переменная
mypidgetpidread_one_responsestatic pid_t mypid;static int read_one_response(message_db_t *rec_ptr);3. Подпрограммы
database_initializecloseint database_initialize(const int new_database) { if (!client_starting()) return(0); mypid = getpid(); return(1);}/* инициализация базы данных */void database_close(void) { client_ending();}4. Подпрограмма
get_cdc_entrymessage_db_tmessage_db_tmessage_db_tcdc_entrycdc_entry get_cdc_entry(const char *cd_catalog_ptr) { cdc_entry ret_val; message_db_t mess_send; message_db_t mess_ret; ret_val.catalog[0] = ' '; mess_send.client_pid = mypid; mess_send.request = s_get_cdc_entry; strcpy(mess_send.cdc_entry_data.catalog, cd_catalog_ptr); if (send_mess_to_server(mess_send)) { if (read_one_response(&mess_ret)) { if (mess_ret.response == r_success) { ret_val = mess_ret.cdc_entry_data; } else { fprintf(stderr, "%s", mess_ret.error_text); } } else { fprintf(stderr, "Server failed to respondn"); } } else { fprintf(stderr, "Server not accepting requestsn"); } return(ret_val);}5. Далее приведен исходный текст функции
read_one_responsestatic int read_one_response(message_db_t *rec_ptr) { int return_code = 0; if (!rec_ptr) return(0); if (start_resp_from_server()) { if (read_resp_from_server(rec_ptr)) { return_code = 1; } end_resp_from_server(); } return(return_code);}6. Остальные подпрограммы
get_xxxdel_xxxadd_xxxget_cdc_entrycdt_entry get_cdt_entry(const char *cd_catalog_ptr, const int track no) { cdt_entry ret_val; message_db_t mess_send; message_db_t mess_ret; ret_val.catalog[0] = ' '; mess_send.client_pid = mypid; mess_send.request = s_get_cdt_entry; strcpy(mess_send.cdt_entry_data.catalog, cd_catalog_ptr); mess_send.cdt_entry_data.track_no = track_no; if (send_mess_to_server(mess_send)) { if (read_one_response(&mess_ret)) { if (mess_ret.response == r_success) { ret_val = mess_ret.cdt_entry_data; } else { fprintf(stderr, "%s", mess_ret.error_text); } } else { fprintf(stderr, "Server failed to respondn"); } } else {
