蜗牛哒哒

LINUX教程-LINUX编程-POLL设备方法

作者: 蜗牛哒哒 发布时间: 2020-12-23 150 人阅读

Poll方法
Q:什么是Poll方法,用来做什么?

Select系统调用(功能)
Select系统调用用于多路监控,当没有一个文件满足要求时,select将阻塞调用进程。

int select(int maxfd, fd_set *readfds, fd_set *writefds, fe_set *exceptfds, const struct timeval *timeout)
Maxfd:
文件描述符的范围,比待检测的最大文件描述符大1
Readfds:
被读监控的文件描述符集
Writefds:
被写监控的文件描述符集
Exceptfds:
被异常监控的文件描述符集;
Timeout:定时器
Timeout取不同的值,该调用有不同的表现:
Timeout值为0,不管是否有文件满足要求,都立刻返回,无文件满足要求返回0,有文件满足要求返回一个正值。
Timeout为NULL,select将阻塞进程,直到某个文件满足要求
Timeout值为正整数,就是等待的最长时间,即 select在timeout时间内阻塞进程。
Select调用返回时,返回值有如下情况:
1.正常情况下返回满足要求的文件描述符个数;
2.经过了timeout等待后仍无文件满足要求,返回值为0;
3.如果select被某个信号中断,它将返回-1并设置errno为EINTR。
4.如果出错,返回-1并设置相应的errno。
将要监控的文件添加到文件描述符集
调用Select开始监控
判断文件是否发生变化

系统提供了4个宏对描述符集进行操作:
#include <sys/select.h>
void FD_SET(int fd, fd_set *fdset)
void FD_CLR(int fd, fd_set *fdset)
void FD_ZERO(fd_set *fdset)
void FD_ISSET(int fd, fd_set *fdset)
宏FD_SET将文件描述符fd添加到文件描述符集fdset中;宏FD_CLR从文件描述符集fdset中清除文件描述符fd;宏FD_ZERO清空文件描述符集fdset;在调用select后使用FD_ISSET来检测文件描述符集fdset中的文件fd发生了变化。
FD_ZERO(&fds); //清空集合FD_SET(fd1,&fds); //设置描述符
FD_SET(fd2,&fds); //设置描述符
maxfdp=fd1+1; //描述符最大值加1,假设fd1>fd2
switch(select(maxfdp,&fds,NULL,NULL,&timeout)) case -1: exit(-1);break; //select错误,退出程序 case 0:break; default: if(FD_ISSET(fd1,&fds)) //测试fd1是否可读

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2.本站所有资源不保证完整性,仅供参考学习!
3. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
4. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
5. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
6. 如有链接无法下载、失效或广告,请联系管理员处理!
7. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
8. 如遇到加密压缩包,默认解压密码为"woniudada",如遇到无法解压的请联系管理员处理!
蜗牛哒哒 » LINUX教程-LINUX编程-POLL设备方法