欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > 嵌入式学习day35

嵌入式学习day35

2025/4/2 14:51:55 来源:https://blog.csdn.net/weixin_70572180/article/details/141649407  浏览:    关键词:嵌入式学习day35

IO多路复用(IO多路转接)

1.多个IO复用一个进程

select

poll

epoll

1.创建文件描述符集合

2.添加文件描述符到集合中

3.通知内核开始检测

4.根据返回的结果做对应的操作(对IO读、写操作)

特点:

1.多个IO复用一个进程,不创建新的进程和线程,效率高

2.不适合处理比较耗时的任务

应用场景:

1.构建并发服务器,使用IO多路复用监测多个客户端套接字

2.使用IO多路复用监测多个IO所对应的通信(如:网络、串口、can...)

3.在阻塞IO中,进行超时监测

Linux下一切皆文件

select

检测多路IO

参数:

nfds 关注的文件描述符中的最大值加一(方便内核遍历查找)

readfds 关注的读事件的文件描述符集合

writefds 关注的写事件的文件描述符集合

exceptfds 其他(异常)

timeout 超时时间,如果不设置:NULL

返回值:

成功 返回内核通知的到达事件的个数

失败 返回-1

设置了超时时间,超时时间到达但没有事件 返回0

不足:

1.监听文件描述符最大个数为1024(数组) 时间复杂度(衡量效率):O(n)

2.监听的文件描述符集合在用户层,需要应用层和内核层互相传递数据

3.需要循环遍历一次才能找到产生的事件

4.只能工作在水平触发模式(低速模式)无法工作在边沿触发模式(高速模式)

网络调试:

epoll

epoll_create

epoll_ctl

参数:

epfds 文件描述符集合句柄

op:

fd 操作的文件描述符

event 文件描述符所对应的事件

event EPOLLIN:读操作

EPOLLOUT:写操作

epoll_wait

监测IO事件

参数:

epfd 文件描述符集合句柄

events 保存到达事件的结合的首地址

maxevents 监测是事件的个数

timeout 超时时间

-1:表示不设置超时时间

返回值:

成功 返回到达事件的个数

失败 返回-1

设置超时:超时时间到达则返回0

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词