Основы программирования в Linux
Основы программирования в Linux читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Начните с заголовочного файла для определения структуры ваших данных и подпрограмм, которые будут использоваться для доступа к данным.
1. Далее приведено определение структуры данных для базы данных компакт-дисков. В него включено определение структур и размеров двух таблиц, формирующих базу данных. Начните с задания размеров некоторых полей, которые вы будете применять, и двух структур: одной для элемента каталога, а другой для элемента дорожки.
/* Таблица catalog */#define CAT_CAT_LEN 30#define CAT_TITLE_LEN 70#define CAT_TYPE_LEN 30#define CAT_ARTIST_LEN 70typedef struct { char catalog[CAT_CAT_LEN + 1]; char title[CAT_TITLE_LEN + 1]; char type [CAT_TYPE_LEN + 1]; char artist[CAT_ARTIST_LEN + 1];} cdc_entry;/* Таблица дорожек, по одному элементу на дорожку */#define TRACK_CAT_LEN CAT_CAT_LEN#define TRACK_TTEXT_LEN 70typedef struct { char catalog[TRACK_CAT_LEN + 1]; int track_no; char track_txt[TRACK_TTEXT_LEN + 1];} cdt_entry;2. Теперь, имея структуры данных, можно определить нужные вам подпрограммы доступа. Функции с префиксом
cdc_cdt_Учтите, что некоторые функции возвращают структуры данных. Вы можете указать на аварийное завершение таких функций, сделав содержимое структур пустым.
/* Функции инициализации и завершения */int database_initialize(const int new_database);void database_close(void);/* Две функции для простого извлечения данных */cdc_entry get_cdc_entry(const char *cd_catalog_ptr);cdt_entry get_cdt_entry(const char *cd_catalog_ptr, const int track_no);/* Две функции для добавления данных */int add_cdc_entry(const cdc_entry entry_to_add);int add_cdt_entry(const cdt_entry entry_to_add);/* Две функции для удаления данных */int del_cdc_entry(const char *cd_catalog_ptr);int del_cdt_entry(const char *cd_catalog_ptr, const int track_no);/* Одна функция поиска */cdc_entry search_cdc_entry(const char *cd_catalog_ptr, int *first_call_ptr);Теперь перейдем к пользовательскому интерфейсу. Вам предлагается простая программа, с помощью которой вы сможете обращаться к функциям вашей базы данных. Интерфейс реализуется в отдельном файле.
1. Как обычно, начните с некоторых заголовочных файлов:
#define _XOPEN_SOURCE#include <stdlib.h>#include <unistd.h>#include <stdio.h>#include <string.h>#include "cd_data.h"#define TMP_STRING_LEN 125 /* это число должно быть больше самой длинной строки в структуре базы данных */2. Опишите пункты вашего меню с помощью
typedef#definetypedef enum { mo_invalid, mo_add_cat, mo_add_tracks, mo_del_cat, mo_find_cat, mo_list_cat_tracks, mo_del_tracks, mo_count_entries, mo_exit} menu_options;3. Теперь введите прототипы локальных функций. Помните о том, что прототипы функций, обеспечивающих реальный доступ к базе данных, включены в файл cd_data.h.
static int command_mode(int argc, char *argv[]);static void announce(void);static menu_options show_menu(const cdc_entry *current_cdc);static int get_confirm(const char *question);static int enter_new_cat_entry(cdc_entry *entry_to_update);static void enter_new_track_entries(const cdc_entry* entry_to_add_to);static void del_cat_entry(const cdc_entry *entry_to_delete);static void del_track_entries(const cdc_entry *entry_to_delete);static cdc_entry find_cat(void);static void list_tracks(const cdc_entry *entry_to_use);static void count_all_entries(void);static void display_cdc(const cdc_entry *cdc_to_show);static void display_cdt(const cdt_entry *cdt_to_show);static void strip_return(char *string_to_strip);4. И наконец, вы добрались до функции
maincurrent_cdc_entryvoid main(int argc, char *argv[]) {
