使用select loop vs fdisset

时间:2013-05-27 11:26:09

标签: c sockets

我试图找出使用select()函数和FD_ISSET调用之间的区别。有哪些不同的场景可以证明使用其中任何一种?

3 个答案:

答案 0 :(得分:1)

fd_set是用于调用select的输入的位数组。

FD_ISSET用于检查fd_set中是否设置了特定位。

select用于轮询与fd_set中设置的位对应的所有文件描述符。

典型的情况是:

创建并清除fd_set

设置要监视的文件描述符的位。

致电选择。

在for循环中调用FD_ISSET。如果设置了特定位,则该文件描述符已准备好被读取(或写入或出错)。

答案 1 :(得分:0)

select是Unix中的系统调用和应用程序编程接口,类似于操作系统,用于检查打开的输入/输出通道的文件描述符的状态。因此,select()函数指示哪些指定的文件描述符已准备好进行读取,准备写入或具有待处理的错误条件。

FD_ISSET返回文件描述符集中文件描述符的值。它在头文件<sys/time.h>中声明。 原型是,

int FD_ISSET(int fd, fd_set* fdset)

如果文件描述符在fdset指向的文件描述符集中设置,则返回非零值,否则返回0.

答案 2 :(得分:0)

select()函数指示哪些指定的文件描述符已准备好进行读取,准备写入或有错误条件未决。

FD_ISSET()测试文件描述符是否是集合的一部分;这在select()返回后很有用。