08-应用程序中的轮询编程
8.2.2 应用程序中的轮询编程
应用程序中最广泛用到的是BSD UNIX中引入的select()系统调用,其原型为:
int select(int numfds, fd_set readfds, fd_set writefds, fd_set *exceptfds, struct
timeval *timeout);
其中readfds、writefds、exceptfds分别是被select()监视的读、写和异常处理的文件描述符集合,numfds的值是需要检查的号码最高的文件描述符加1。timeout参数是一个指向struct timeval类型的指针,它可以使select()在等待timeout时间后若没有文件描述符准备好则返回。struct timeval数据结构的定义如代码清单8.10所示。
代码清单8.10 timeval结构体定义
1 struct timeval {
2 int tv_sec; / 秒 /
3 int tv_usec; / 微秒 /
4 };
下列操作用来设置、清除、判断文件描述符集合:
FD_ZERO(fd_set *set)
清除一个文件描述符集;
FD_SET(int fd,fd_set *set)
将一个文件描述符加入文件描述符集中;
FD_CLR(int fd,fd_set *set)
将一个文件描述符从文件描述符集中清除;
FD_ISSET(int fd,fd_set *set)
判断文件描述符是否被置位。