Linux select函数

来源:互联网 发布:什么便签软件好看 编辑:程序博客网 时间:2024/05/24 06:46

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);//--处理函数--//

}

}

}

0 0