自学嵌入式第29天-----epoll、sqlite3

1. 正确选择触发模式(ET 和 LT)

  • 水平触发(LT) :默认模式,只要文件描述符处于就绪状态,epoll_wait 会持续通知。适合大多数场景,编程简单。

  • 边缘触发(ET):只在状态变化时通知一次,适合高性能场景,但需要确保一次性处理完所有数据,否则可能丢失事件。

  • 注意

    • 在 ET 模式下,必须循环读取或写入数据,直到返回 EAGAINEWOULDBLOCK

    • 如果未处理完数据,epoll_wait 不会再通知,可能导致事件丢失。


2. 正确处理事件

  • 事件类型

    • EPOLLIN:数据可读。

    • EPOLLOUT:数据可写。

    • EPOLLERR:发生错误。

    • EPOLLHUP:对端关闭连接。

  • 注意

    • 必须处理 EPOLLERREPOLLHUP 事件,否则可能导致程序异常。

    • EPOLLIN 事件中,确保读取所有数据(特别是在 ET 模式下)。

    • EPOLLOUT 事件中,避免频繁触发(可以通过动态添加/删除 EPOLLOUT 事件来优化)。

3. 文件描述符管理

  • 添加/修改/删除文件描述符

    • 使用 epoll_ctlEPOLL_CTL_ADDEPOLL_CTL_MODEPOLL_CTL_DEL 操作。

    • 确保文件描述符有效,避免重复添加或遗漏删除。

  • 注意

    • 文件描述符关闭后,必须从 epoll 实例中删除,否则可能导致未定义行为。

    • 在多线程环境中,文件描述符的管理需要加锁保护。


      sqlite3:

      sqlite3 xxx.db

      1. sqlite的命令

      .help 查询手册

      .tables 查看数据库中的表

      .headers on/off 打开/关闭表头

      .mode column 设置左对齐

      .quit 退出数据库

      1. sqlite支持的SQL(结构化序列语言)语言

      数据类型:

      INTEGER : 整形

      REAL:浮点型

      TEXT:文本字符串类型

      NULL :空

      1. 创建一张表

      create table 表名(列名1 数据类型, 列名2 数据类型, ....);

      1. 插入表格

      insert into 表名 values(值1, 值2, 值3, ...);

      1. 查询数据库中的表

      查询表中的所有数据:

      select * from 表名;

      查找指定列:

      select 列名1,列名2 from 表名;

      条件查找:

      select * from 表名 where 列名 关系运算符 值;

      关系运算符:

      =

      >

      <

      !=

      >=

      <=

      or (||)

      and (&&)

      模糊查找:

      select * from 表名 where 列名 like "%梅";

      % : 可以匹配多个字符

      _ : 只能匹配一个字符

      有序查找:

      升序查找:

      select * from 表名 order by 列名 ASC;

      降序查找:

      select * from 表名 order by 列名 DESC;

      1. 删除数据

      delete from 表名 where 条件;

      1. 修改数据

      update 表名 set 列名=新值,列名=新值 where 条件;

      1. 删除表

      drop table 表名;

      1. sqlite提供的C API接口
相关推荐
SelectDB16 小时前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
zzzzzz3102 天前
9K Star 炸裂开源!这个 C 语言写的代码知识图谱,把 Linux 内核索引压缩到了 3 分钟
linux·服务器·sql
XIAOHEZIcode2 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220703 天前
如何搭建本地yum源(上)
运维
大树886 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠6 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质6 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
小宇宙Zz6 天前
Maven依赖冲突
java·服务器·maven
Inhand陈工6 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
网络研究院6 天前
2026年网络安全
网络·安全·法律·法规·趋势·发展