Linux应用之在线词典-数据库的实现
之前我实现了UDP通信可以通过客户端发送信息实现服务端接收。那么要实现数据的查找还要引入sqlite3数据库。SQLite3:是一种轻量级关系型数据库管理系统可嵌入的数据库可以在应用程序内部直接操作文件不需要独立的进程。跨平台零配置体积小。安装sudo apt install sqlite3一些基本命令创建查看数据库文件sqlite3 mydata.db查看当前数据库所有表.tables看数据select *from XXX;退出 .exit为了实现客户端发送英文可以查询需要先导入一个中英文的数据库然后服务端接收进行数据库的查找将查找到的中文返回给服务端。导入数据库将excel文件改格式为CSV导入目标文件下在shell下,mode csv 导入csv格式.import XXX.csv dictionary可以通过查看数据 select * form XXX where english’’;判断数据库有没有被导入。准备好了数据库和UDP通信接下来就是对UDP接收的代码进行优化实现查询数据的发送。服务端recvfrom到的英文会放在buf缓冲区中在利用sqlite3中的exec函数族进行查找返回值也在buf中只需要对buf进行处理就得到了查询到的中文。同理在客户端recv服务端发出的buf就可以收到查询的中文。下面是服务端部分代码void udp_main(const int fd, const struct sockaddr_in *addr) {int rc;int ret;sqlite3 *db;char buf[BUFSIZ]{};char *sql_query,*errmsg;struct sockaddr_in client_addr;socklen_t addrlen sizeof(client_addr);if( (rc sqlite3_open(DATABASE_NAME,db)) ){printf([%s:%d]无法打开数据库%s\n,__FUNCTION__,__LINE__,sqlite3_errmsg(db));exit(0);}while(1){do{retrecvfrom(fd,buf,BUFSIZ,0,(struct sockaddr *)client_addr,addrlen);}while(ret0 errno EINTR);if(ret 0)ErrExit(recvfrom);printf([%s:%d]收到的数据:{%s}\n,__FUNCTION__,__LINE__,buf);/*提取需要翻译的单词*/int i0;char word[128]{};for( i0;isalpha(buf[i]) || buf[i] ;i){word[i]buf[i];}word[i]\0;buf[i]\0;/*用SQL语句进行查询*/sql_query sqlite3_mprintf(select * from dictionary where english like %s,buf);rc sqlite3_exec(db,sql_query,callback,buf,errmsg);if(rc !SQLITE_OK){sprintf(buf,fail:%s\n,errmsg);printf([%s:%d]:{%s}\n,__FUNCTION__,__LINE__,buf);sendto(fd,buf,strlen(buf)1,0,(struct sockaddr *)client_addr,addrlen);sqlite3_free(errmsg);continue;}sqlite3_free(sql_query);printf([%s:%d]查询结果:%s\n,__FUNCTION__,__LINE__,buf);if(buf[strlen(buf)-1] \n)buf[strlen(buf)-1]\0;Savedata(word,buf);sendto(fd,buf,strlen(buf)1,0,(struct sockaddr *)client_addr,addrlen);}sqlite3_close(db);close(fd);close(rc);}int callback(void *NotUsed, int argc, char **argv, char **ColName) {char *buf NotUsed;if(argc 2) {/* 把查询到的字符串复制给buf */strncpy(buf, argv[1], strlen(argv[1]) 1 );//将第二个结果及中文输出} elsebuf[0] \0; //如果失败就将字符串置空/* 给字符串增加为\0 */buf[strlen(argv[1])] \n;buf[strlen(argv[1])1] \0;return 0;}void Savedata(const char *word,const char *buf){FILE *fp;int linecount 0;time_t ctime;struct tm *ctimestr;char str[128]{};if( (fp fopen(serve_record.txt,a) ) NULL)ErrExit(fopen);while( fgets(str,128,fp) ! NULL){if(str[strlen(str)-1] \n)linecount;}ctime time(NULL);ctimestr localtime(ctime);printf(%d\t%04d-%02d-%02d %02d:%02d:%02d\t%s\t%s\n,linecount,ctimestr-tm_year1900, ctimestr-tm_mon1, ctimestr-tm_mday,ctimestr-tm_hour, ctimestr-tm_min, ctimestr-tm_sec, word, buf);fprintf(fp, %d\t%04d-%02d-%02d %02d:%02d:%02d\t%s\t%s\n,linecount,ctimestr-tm_year1900, ctimestr-tm_mon1, ctimestr-tm_mday,ctimestr-tm_hour, ctimestr-tm_min, ctimestr-tm_sec, word, buf);fclose(fp);}

相关新闻

CNN+BiGRU+Attention模型进行数据分类预测

CNN+BiGRU+Attention模型进行数据分类预测

CNN-BiGRU-Attention基于卷积神经网络-双向门控循环单元-注意力机制的数据分类预测 Matlab语言 1.多特征输入,分类也可以改成回归或时间序列预测模型,Matlab版本要在2020B及以上。 2.特点: [1]卷积神经网络 (CNN):捕捉数据中的局部…

2026/5/17 9:22:44 阅读更多 →
linux使用docker部署MongoDB

linux使用docker部署MongoDB

创建数据存放目录 在动手之前,需要先在宿主机上创建一个目录,用来存放 MongoDB 的数据,这样即使容器删除,数据也不会丢。 # -p 参数会自动创建父目录bash mkdir -p /home/mongodb/data2. 拉取 MongoDB 镜像 为了获得更稳定的环境&…

2026/7/4 17:20:37 阅读更多 →
claude code接入不同大模型的测试

claude code接入不同大模型的测试

以b站上马克的技术工程的视频案例测试对比 1.deepseek 大模型 api费用不贵,生产代码的速度很慢.效率低,用了我一个半小时将其做出来.主要是deepseek处理的速度比较慢.没有马克视频那么快. 后续继续更新

2026/7/4 11:52:54 阅读更多 →

最新新闻

卡梅德生物技术快报| KM13 辅助噬菌体的天然 VHH 噬菌体文库全套构建流程与数据验证

卡梅德生物技术快报| KM13 辅助噬菌体的天然 VHH 噬菌体文库全套构建流程与数据验证

一、提出问题:实验室自建纳米抗体文库常遇四大工程化痛点 食品检测实验室自主构建 VHH 噬菌体文库时,普遍存在工程化落地难题:其一,普通单轮 PCR 扩增 VHH 基因存在大量缺失,文库多样性不足;其二&#xff…

2026/7/6 2:51:55 阅读更多 →
Variance Reduction with Baseline 补充 - 加基线使得方差降低

Variance Reduction with Baseline 补充 - 加基线使得方差降低

什么叫基线 基线就是一个只和当前状态s有关、和动作a无关的数值 b(s),用来做 “参考平均分”假设某状态s平均长期收益 b(s)10 某条轨迹 G_t18:A_t18-108>0,动作比平均更好,加大该动作概率 某条轨迹 G_t3:A_t3-10-7…

2026/7/6 2:51:55 阅读更多 →
MP1584 降压电源 PCB 布局 5 大要点:实测 SW 节点尖峰降低 60%

MP1584 降压电源 PCB 布局 5 大要点:实测 SW 节点尖峰降低 60%

MP1584降压电源PCB布局实战:5大核心技巧让SW节点尖峰直降60%作为一名长期奋战在电源设计一线的工程师,我深知PCB布局对开关电源性能的决定性影响。今天我们就以MP1584这款经典降压芯片为例,通过实测数据揭示那些手册上不会告诉你的布局奥秘。…

2026/7/6 2:49:55 阅读更多 →
非线性字符串数据结构串讲

非线性字符串数据结构串讲

书接去年,今天作业不想写了,滚过来写总结。顺便保留我刚略微学会的串串。 声明:作者由于水平不高,所以有些定理不能严谨证明,所以若是初学者请移步别处。 1.Trie树 定义 Trie树又叫字典树,是非常显然的…

2026/7/6 2:47:55 阅读更多 →
Lemos知识库-AI+知识图谱驱动智能脑进化

Lemos知识库-AI+知识图谱驱动智能脑进化

Lemos 通过其“AI知识图谱”双引擎,将传统的静态知识库转变为动态智能脑,其核心转变体现在知识单元、组织逻辑、构建方式、交互模式、演化能力及最终目标六个层面。 转变维度传统静态知识库 (以Ima为例)Lemos 动态智能脑实现转变的关键机制知识单元原子…

2026/7/6 2:47:55 阅读更多 →
2026年实用指南3个复习笔记使用场景选择标准帮你精准适配需求

2026年实用指南3个复习笔记使用场景选择标准帮你精准适配需求

"这篇就是给只会把复习笔记当抄板书草稿本的学生,整理了2026年实用的3个复习笔记使用场景选择标准,精准对应学生最常用的课堂复习、论文调研、知识自测三类需求,解决大家只会用基础功能、记了白记复习低效的痛点,每一个标准都…

2026/7/6 2:47:54 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻