📄 create.h
字号:
#ifndef _CREATE_H#define _CREATE_H#include <db.h> #include<fcntl.h>#include<unistd.h>#include<string.h>#include "t2s.h"#define DEFAULT_HOMEDIR "./db/" #define WORDS_INDEXDB "words_index.db"#define WORDSDB "words.db"#define KEYBOARDDB "keyboard.db"#define STADB "sta.db"/*错误提示函数*/void print_error(int ret){ char array[10]="查询无结果"; if(ret!=0) { printf("ERROR;%s\n",db_strerror(ret)); // T2S_option( FEMALE, 2, 1 ); //调用语音函数读出汉字 // T2S_t2s( array ); }}/*此程序定义了一个STOCK_DBS结构体,包含了可以进行操作的所有数据库*/typedef struct stock_dbs { DB *keyboard_dbp; /* keyboard 数据库句柄 */ DB *words_index_dbp; /* words_index 数据库句柄 */ DB *words_dbp; /* words 数据库句柄 */ DB *sta_dbp; /*sta 数据库句柄*/ char *db_home_dir; /* 包含数据库文件的目录 */ char *keyboard_db_name; /* keyboard数据库名 */ char *words_index_db_name; /* words_index 数据库名 */ char *words_db_name; /* words 数据库名 */ char *sta_db_name; /*sta 数据库名*/} STOCK_DBS;/* 定义处理结构体中的数据库的函数 */int databases_setup(STOCK_DBS *, const char *, FILE *);int databases_close(STOCK_DBS *);void initialize_stockdbs(STOCK_DBS *);int open_database(DB **, const char *, const char *, FILE * );void set_db_filenames(STOCK_DBS *my_stock); /* 初始化 STOCK_DBS 结构体.*/void initialize_stockdbs(STOCK_DBS *my_stock){ my_stock->db_home_dir = DEFAULT_HOMEDIR; my_stock->keyboard_dbp = NULL; my_stock->words_index_dbp = NULL; my_stock->words_dbp = NULL; my_stock->sta_dbp = NULL; my_stock->keyboard_db_name = NULL; my_stock->words_index_db_name = NULL; my_stock->words_db_name = NULL; my_stock->sta_db_name = NULL;}/* 定义所有的数据库文件 */void set_db_filenames(STOCK_DBS *my_stock){ size_t size;/* 定义 keyboard 数据库文件名 */ size = strlen(my_stock->db_home_dir) + strlen(KEYBOARDDB) + 1; my_stock->keyboard_db_name = malloc(size); snprintf(my_stock->keyboard_db_name, size, "%s%s", my_stock->db_home_dir, KEYBOARDDB); // printf("keyboard_db_name: %s\n",my_stock->keyboard_db_name);/* 定义 words_index 数据库文件名 */ size = strlen(my_stock->db_home_dir) + strlen(WORDS_INDEXDB) + 1; my_stock->words_index_db_name = malloc(size); snprintf(my_stock->words_index_db_name, size, "%s%s", my_stock->db_home_dir, WORDS_INDEXDB);// printf("words_index_db_name: %s\n",my_stock->words_index_db_name);/* 定义 words 数据库文件名*/ size = strlen(my_stock->db_home_dir) + strlen(WORDSDB) + 1; my_stock->words_db_name = malloc(size); snprintf(my_stock->words_db_name, size, "%s%s", my_stock->db_home_dir, WORDSDB);// printf("words_db_name: %s\n",my_stock->words_db_name);/*定义sta 数据库文件名*/ size = strlen(my_stock->db_home_dir) + strlen(STADB) + 1; my_stock->sta_db_name = malloc(size); snprintf(my_stock->sta_db_name, size, "%s%s", my_stock->db_home_dir, STADB);// printf("sta_db_name: %s\n",my_stock->sta_db_name);}/* 创建数据库 */int open_database( DB **dbpp, const char *file_name, const char *program_name, FILE *error_file_pointer ) { DB *dbp; /* For convenience */ u_int32_t open_flags; int ret; ret = db_create(&dbp, NULL, 0); if (ret != 0) { fprintf(error_file_pointer, "%s: %s\n", program_name, db_strerror(ret)); return(ret); } *dbpp = dbp; dbp->set_errfile(dbp, error_file_pointer); dbp->set_errpfx(dbp, program_name); open_flags = DB_CREATE; ret = dbp->open( dbp, NULL, file_name, NULL, DB_BTREE, open_flags, 0); if (ret != 0) { dbp->err(dbp, ret, "Database '%s' open failed.", file_name); return(ret); } return (ret);} /* 打开所有数据库 */int databases_setup(STOCK_DBS *my_stock, const char *program_name, FILE *error_file_pointer){ int ret;/* 打开 words 数据库 */ ret = open_database(&(my_stock->words_dbp), my_stock->words_db_name, program_name, error_file_pointer ); if (ret != 0) return (ret);/* 打开 words_index 数据库 */ ret = open_database(&(my_stock->words_index_dbp), my_stock->words_index_db_name, program_name, error_file_pointer ); if (ret != 0) return (ret);/* 打开 keyboard 数据库 */ ret = open_database(&(my_stock->keyboard_dbp), my_stock->keyboard_db_name, program_name, error_file_pointer ); if (ret != 0) return (ret);/*打开sta 数据库*/ ret = open_database(&(my_stock->sta_dbp), my_stock->sta_db_name, program_name, error_file_pointer ); if (ret != 0) return (ret); return (0);} /* 关闭所有数据库 */intdatabases_close(STOCK_DBS *my_stock){ int ret; /* 关闭 words 数据库 */ if (my_stock->words_dbp != NULL) { ret = my_stock->words_dbp->close(my_stock->words_dbp, 0); if (ret != 0) fprintf(stderr, "words database close failed: %s\n", db_strerror(ret)); } /* 关闭 words_index 数据库 */ if (my_stock->words_index_dbp != NULL) { ret = my_stock->words_index_dbp->close(my_stock->words_index_dbp, 0); if (ret != 0) fprintf(stderr, "words_index database close failed: %s\n", db_strerror(ret)); }/* 关闭 keyboard 数据库 */ if (my_stock->keyboard_dbp != NULL) { ret = my_stock->keyboard_dbp->close(my_stock->keyboard_dbp, 0); if (ret != 0) fprintf(stderr, "keyboard database close failed: %s\n", db_strerror(ret)); }/*关闭sta 数据库*/if (my_stock->sta_dbp != NULL) { ret = my_stock->sta_dbp->close(my_stock->sta_dbp, 0); if (ret != 0) fprintf(stderr, "sta database close failed: %s\n", db_strerror(ret)); } return (0);} #endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -