【Linux 物联网网关主控系统-Web部分(一)】

张开发
2026/4/5 19:54:47 15 分钟阅读

分享文章

【Linux 物联网网关主控系统-Web部分(一)】
Linux 物联网网关主控系统-Web部分一一、Linux 目录操作1.目录操作的项目应用场景2.核心函数解析1.opendir打开目录2. readdir读取目录内容3.closedir关闭目录3.代码示例二、SQLite1.SQLite基础1.嵌入式 Linux 常用数据库2.SQLite3 发展背景3.SQLite3 核心特性4.SQLite3 安装操作Ubuntu 环境2.SQLite3 数据类型和约束1.SQLite3 主要数据类型2.SQLite3 其它拓展数据类型3.SQLite3 表的约束3.表操作增删改查前置准备1.增插入数据INSERT2.查查询数据SELECT3.改修改数据UPDATE4.删删除数据DELETE4.Sqlite C编程接口一、Linux 目录操作1.目录操作的项目应用场景在本项目中摄像头拍摄的图片会存储在/www/pice目录下若要实现历史图片展示功能就需要通过目录操作函数遍历该目录下的所有图片文件获取文件名后再进行后续的读取和展示处理这也是嵌入式开发中目录操作最典型的应用场景之一。2.核心函数解析1.opendir打开目录DIR*opendir(constchar*name);打开参数name指定的目录返回DIR * 类型的目录流类似文件操作的文件描述符后续对目录的读取、遍历操作均基于此返回值作用与文件操作的open()类似。成功返回 DIR * 型的目录流指针失败返回 NULL。2. readdir读取目录内容structdirent*readdir(DIR*dir);读取参数diropendir 返回的目录流指向的目录每次调用返回目录中的下一个目录项遍历至目录末尾时停止。成功返回下一个目录项的struct dirent指针失败 / 读取到目录末尾返回 NULL。关键结构体struct direntstructdirent{ino_td_ino;// 此目录项的inode节点号off_td_off;// 目录文件开头到当前目录项的位移signedshortd_reclen;// d_name的长度不含NULL结束符unsignedchard_type;// 文件类型核心字段用于判断文件类型chard_name[256];// 文件名核心字段};3.closedir关闭目录intclosedir(DIR*dir);关闭参数dir指向的目录流释放相关资源作用与文件操作的close()类似遍历目录后必须调用避免资源泄漏。成功返回0 失败返回-1错误原因存于errno中。3.代码示例#includestdio.h#includedirent.h#includestdlib.h// 包含exit()函数// 定义图片存储目录#defineDIRNAME/www/pice// 定义最大图片数可选#definePHOTO_NUM_MAX100intmain(){// 定义目录流指针和目录项结构体指针DIR*dir;structdirent*dirp;// 用于统计文件序号inttotal_num1;// 第一步打开目录做错误处理if((diropendir(DIRNAME))NULL){perror(fail to opendir);// 打印错误信息exit(1);// 异常退出}// 第二步循环读取目录项直至遍历结束while((dirpreaddir(dir))!NULL){// 打印文件序号三位补0和文件名printf(%03d:%s\t,total_num,dirp-d_name);}printf(\n);// 换行优化输出格式// 第三步关闭目录释放资源closedir(dir);return0;}PS:如果文件夹里面还有文件夹重点 1原代码不区分文件 / 文件夹文件夹会被当作普通名称打印不会进入读取。重点 2判断文件 / 文件夹的方法dirp-d_typeDT_REG// 普通文件dirp-d_typeDT_DIR// 文件夹重点 3两种处理方式跳过文件夹只打印图片 / 文件递归遍历进入子文件夹继续读嵌入式项目最常用二、SQLite1.SQLite基础1.嵌入式 Linux 常用数据库在嵌入式 Linux 开发中主流的轻量级数据库主要有SQLite、Firebird、Berkeley DB、eXtremeDB其中 SQLite 是最常用的选择而传统大型数据库Oracle、DB2、SQL2000、MySQL因体积、资源占用等问题不适合嵌入式场景。2.SQLite3 发展背景1.作者D.RichardHipp2.开发初衷打造一款简单的嵌入式 SQL 数据库基于 GNU DBM 哈希库做后台无需安装和管理支持3.版本发布2000 年 8 月发布 SQLite 1.0 版是一款轻量级嵌入式数据库适配嵌入式开发的轻量、低资源需求。3.SQLite3 核心特性这是 SQLite3 适配嵌入式开发的关键也是其区别于传统大型数据库的核心优势共 6 大核心特性1.零配置无需安装和任何管理配置直接使用适配嵌入式设备的简易部署需求2.单文件存储整个数据库的所有数据都储存在单一磁盘文件中便于管理和移植3.跨平台兼容数据库文件可在不同字节顺序的机器间自由共享无平台适配障碍4.大容量支持单数据库文件大小最大可支持2TB满足嵌入式场景的存储需求5.超轻量全部源码仅约 3 万行 C 代码编译后体积仅 250KB对嵌入式设备的内存、存储资源占用极低6.高性能对数据的操作速度比目前主流的大多数数据库更快适配嵌入式设备的低性能硬件环境。4.SQLite3 安装操作Ubuntu 环境源码下载地址 https://www.sqlite.org/index.html用下面的 apt-get就不用这个了嵌入式开发中需安装应用程序开发库 / 头文件C 语言操作数据库必须装也可安装图形化工具简化操作具体命令如下核心安装必装c图形化工具安装可选便于可视化操作sudo apt-get install sqlitebrowser查看版本# 进入sqlite3环境 sqlite3 # 查看版本信息.versionSQLite version3.11.02016-02-1517:29:243d862f207e3adc00f78066799ac5a8c282430a5f2.SQLite3 数据类型和约束1.SQLite3 主要数据类型2.SQLite3 其它拓展数据类型3.SQLite3 表的约束约束是对数据表中列的额外限制属性用于规范列的取值规则避免无效、错误数据的插入常用约束共 6 种各约束的核心作用如下3.表操作增删改查SQLite3 中对数据表的核心操作即为增、删、改、查操作前需先创建数据库和对应的数据表所有操作均通过 SQL 语句实现以下结合教学管理数据库 jxgl.db、学生表 stu的实战场景梳理完整操作流程包含核心命令、实操示例及注意事项。前置准备创建并打开数据库# 终端执行创建并进入jxgl.db数据库不存在则创建存在则打开 sqlite3 jxgl.db创建 stu 学生表CREATE TABLE IF NOT EXISTSstu(Sno integer primary key,Sname text not null,Ssex text,Sage integercheck(Sage14),Sdept textdefaultCS);验证表创建成功# 查看当前数据库中的所有表.table输出stu1.增插入数据INSERTINSERT INTO 表名VALUES(字段值1,字段值2,字段值3,...);向 stu 表插入 4 条学生数据字段顺序与建表时一致学号、姓名、性别、年龄、专业INSERT INTO STUVALUES(95001,李勇,M,20,CS);INSERT INTO STUVALUES(95002,刘晨,F,19,IS);INSERT INTO STUVALUES(95003,王敏,F,18,MA);INSERT INTO STUVALUES(95004,张立,M,18,IS);辅助命令验证插入结果# 查看表中所有数据需先设置列对齐和显示表头优化输出.headers on.mode column select*from stu;2.查查询数据SELECT# 查询表中所有字段的所有数据 SELECT*FROM 表名;# 查询指定字段的指定数据配合WHERE条件筛选 SELECT 字段1,字段2FROM 表名 WHERE 筛选条件;实操示例#1.查询stu表中所有学生的所有信息 select*from stu;#2.筛选查询查询专业为CS的学生姓名和学号 select Sno,Sname from stu where SdeptCS;#3.条件筛选查询年龄大于18的学生信息 select*from stu where Sage18;3.改修改数据UPDATEUPDATE 表名 SET 字段1新值1,字段2新值2WHERE 筛选条件;实操示例将 stu 表中张立的年龄修改为 29UPDATE stu SET sage29WHERE sname张立;验证修改结果select*from stu where sname张立;4.删删除数据DELETEDELETE FROM 表名 WHERE 筛选条件;注意必须加 WHERE 条件否则会删除表中所有数据实操示例删除 stu 表中王敏的这条记录delete from stu where sname王敏;验证删除结果select*from stu;4.Sqlite C编程接口前面的终端增删改查 → 人手动操作数据库测试 / 调试用这里的C 编程接口 → 程序自动操作数据库项目开发实际使用

更多文章