您的位置:首页 > 运维架构 > Linux

Linux select函数

2014-03-28 09:17 183 查看
select():此函数的作用是用来检测文件描述符是否已准备就绪。

参数一:numfds - 该参数的值为需要监视的文件描述最大数量加一。

参数二:readfds - 由select函数监视的读文件描述符集。

参数三:writefds - 由select函数监视的写文件描述符集。

参数四:exeptfds - 由select函数监视的异常处理文件描述符集。

参数五:timeout - 设定的检测超时值。为NULL时表示永远等待,直到有文件描述符

就绪。为具体值时如规定时间内没有检测到有描述符准备就绪,就立即返回。

返回值:0 - 超时。

-1 - 出错。

>0 - 成功且表示准被好的文件描述符。

-----------------------------------------------------------------------------------------------------------

用法:

fd_set file_sets;

fd_set tmp_sets;

int fd;

fd = xx_function(); //--xx_function()的返回值是一个文件描述符--//

//---初始化文件描述符集file_sets---//

FD_ZERO(file_sets);

FD_SET(fd, file_sets);

while(1)

{

tmp_sets = file_sets; //--避免重复初始化file_sets--//

/*

select操作后的结果是如果tmp_sets中的文件描述准备就绪则不从tmp_sets中

删除,否则则从tmp_sets中删除。这也是为什么会有tmp_sets = file_sets的原

因。

*/

select(MAX_FD_SETS + 1, &tmp_sets, NULL, NULL,NULL);

for (int fd = 0; fd < MAX_FD_SETS; ++fd)

{

//---对准备就绪的描述符做相关处理---//

if (FD_ISSET(fd, tmp_sets))

{

xx_function(fd);//--处理函数--//

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: