Select系统调用方法
来源:互联网 发布:html5纯静态源码 编辑:程序博客网 时间:2024/05/21 10:31
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。
使用步骤如下:
1. 将要监控的文件添加到文件描述符集
2. 调用Select开始监控
3. 判断文件是否发生变化
系统提供了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是否可读
- Select系统调用方法
- select系统调用
- 关于select系统调用
- select系统调用
- select系统调用
- select系统调用
- linux Select()系统调用
- linux系统调用select
- Linux select系统调用
- linux select 系统调用
- linux select 系统调用
- select系统调用
- linux下select系统调用
- linux程序设计SELECT系统调用
- Linux下select()系统调用
- Select()系统调用及fd_set的应用
- select(poll)系统调用实现解析(一)
- select(poll)系统调用实现解析(二)
- C#系统服务定时执行
- Android系统笔记
- sencha cmd 常用命令
- 关于socket阻塞与非阻塞情况下的recv、send、read、write返回值
- log4j 配置问题
- Select系统调用方法
- C#程序安装.net服务(不使用InstallUtil.exe)
- Android自动化与持续集成实践
- How to open and close wallet for Oracle Databse 11g?
- 红警2 Win7启动一系列问题
- 求两个排好序的数组中的第k小数字
- C# 定时执行1
- Android Developers:绘制9-patch图片
- 香港美食攻略(3)——源记喳咋