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

  1. 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:操作的事件所对应的文件描述符

  1. 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 数据类型, ....);

  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 表名

相关推荐
PinkandWhite2 分钟前
MySQL复习笔记
数据库·笔记·mysql
熬夜苦读学习39 分钟前
库制作与原理
linux·数据库·后端
cmgdxrz1 小时前
Mysql中的常用函数
数据库·mysql
Amy.com2 小时前
Linux16-数据库、HTML
jvm·数据库
无敌发光大蟒蛇2 小时前
MySQL第一次作业
android·数据库·mysql
曹二7472 小时前
Spring-事务
数据库·spring·oracle
m0_748238923 小时前
MySQL Workbench菜单汉化为中文
android·数据库·mysql
神奇侠20243 小时前
基于springboot和spring-boot-starter-data-jpa快速操作mysql数据库
数据库·spring boot·mysql
TsuanS4 小时前
SQL 注入 (C++向)
数据库·c++·sql
若云止水4 小时前
Ubuntu 下 nginx-1.24.0 源码分析 - conf_ctx
数据库·nginx·ubuntu