当前位置: 首页 > article >正文

IO多路复用(epoll)/数据库(sqlite)

1.poll:

          1. poll使用链表管理文件描述符,对监测的文件描述符没有上限限制。
          2. 文件描述符集合在应用层创建,需要实现应用层和内核层的反复拷贝
          3. 需要应用层对集合表进行遍历,寻找到达的事件
          4. 只能工作在水平触发模式(低速模式),不能工作在边沿触发模式(高速模式) 
2.epoll:

         1. epoll使用树形结构(红黑树)管理文件描述符,提高查找效率
         2. 文件描述符集合创建在内核。避免了应用层和内核层的数据拷贝
         3. 向应用层返回到达的IO事件的结合,不需要遍历查找
         4. 可以工作在水平触发模式(低速模式),也可以工作在边沿触发模式(高速模式)

epoll的操作流程:

        1. 创建文件描述符集合 : epoll_create();
        2. 将关注的文件描述符加入到集合:epoll_ctl()
        3. 等待IO事件到达 : epoll_wait();
        4. 根据不同的IO事件处理不同的任务

函数接口:

   1. int epoll_create(int size);
   功能:创建并打开一个epoll的文件描述符结合
   参数:
        size:最多允许监测的文件描述符个数
   返回值:
      成功:返回代表集合的文件描述符
      失败:-1

  2. int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);
  功能:对文件描述符集合进行操作
  参数:
        epfd:文件描述符集合
        op:
              EPOLL_CTL_ADD:向集合中添加
              EPOLL_CTL_MOD:修改集合
              EPOLL_CTL_DEL:从集合中删除
        fd:要操作的文件描述符
       event:事件的结构体
  成功:0
  失败:-1

          typedef union epoll_data {
               void        *ptr;
               int          fd;
               uint32_t     u32;
               uint64_t     u64;
           } epoll_data_t;

           struct epoll_event {
               uint32_t     events;      /* Epoll events */  //事件类型
               epoll_data_t data;        /* User data variable */
           };

          events:
          EPOLLIN: 对文件描述符的读事件
          EPOLLOUT:对文件描述符的写事件
          data:
          fd:操作的事件所对应的文件描述符

  3.  int epoll_wait(int epfd, struct epoll_event *events,
                      int maxevents, int timeout);
       功能:开始监测IO事件,并返回监测到的结果
       参数:
                 epfd:监测的文件描述符集合
                 events:保存epoll_wait监测到的到达事件的结果
                 maxevents:最多监测的事件个数
                 timeout:超时时间
                               -1:不设置超时
       返回值:
          成功:返回到达的IO事件的个数
          失败:-1
           0:超时时间到达但没有IO事件

数据库: 数据保存在外存上;程序运行结束时,掉电数据不丢失;是一个专业的管理数据工具

sqlite3:(小型的数据库)

1.sqlite常用的命令:

     .help                    查询手册
     .tables                 查看数据库中的表
     .headers on/off    打开/关闭表头
     .mode column     设置左对齐
     .quit                     退出数据库

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

 数据类型:
      INTEGER : 整形
      REAL:浮点型
      TEXT:文本字符串类型
      NULL :空

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

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

    3. 查询数据库中的表
        
        查询表中的所有数据:
        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;

    4. 删除数据
         delete from 表名 where 条件;
      
    5. 修改数据
        update 表名 set 列名=新值,列名=新值 where 条件;
       
    6.  删除表
        drop table 表名


 


http://www.kler.cn/a/578366.html

相关文章:

  • 【Go每日一练】统计字符出现的次数
  • 基于SRAM型FPGA的软错误修复SEM加固技术
  • 【AI深度学习网络】Transformer时代,RNN(循环神经网络)为何仍是时序建模的“秘密武器”?
  • Android中的Loader机制
  • 批量删除 Excel 中的空白行、空白列以及空白表格
  • 力扣刷题125. 验证回文串
  • 如何找到合适的项目管理工具
  • Linux16-数据库、HTML
  • CSDN博客:Markdown编辑语法教程总结教程(中)
  • 【技术干货】三大常见网络攻击类型详解:DDoS/XSS/中间人攻击,原理、危害及防御方案
  • 三、Java-封装playwright UI自动化(一些注解类与工具类的封装,包括定位器,page操作的封装等)
  • Windsuf 连接失败问题:[unavailable] unavailable: dial tcp...
  • 万字总结数据分析思维
  • MAC-禁止百度网盘自动升级更新
  • 前端打包优化相关 Webpack
  • 邮件发送器:使用 Python 构建带 GUI 的邮件自动发送工具
  • 【语料数据爬虫】Python爬虫|批量采集征集意见稿数据(1)
  • 基于Ollama安装deepseek-r1模型搭建本地知识库(Dify、MaxKb、Open-WebUi、AnythingLLM、RAGFlow、FastGPT)
  • 高阶哈希算法
  • 传输层协议