这篇文章主要讲述select的使用,selcet的优点在于, 它是POSIX所规定的, 所有正常的操作系统都是有的。 说白了, 就是通用, 通用, 通用
select
原型
/**
* @param {int} nfds 需要检查的文件描述符个数
* @param {fd_set*} readset 用来检查可读性的一组文件描述符
* @param {fd_set*} writeset 用来检查可写性的一组文件描述符
* @param {fd_set*} exceptset 用来检查是否有异常的一组文件描述符
* @param {timeval*} 超时时间, 填写NULL的时候表示堵塞,
填写0为非堵塞,其他为超时时间
* @retun {int} 发生错误时,返回SOCKET_ERROR
**/
int select(int nfds, fd_set* readset, fd_set* writeset, fd_set* exceptset, struct timeval* timeout)
fd_set
fd_set其实是一个数组的宏定义, 实际上是一个long类型的数组, 存放的是文件描述符(文件句柄)
- FD_SET //添加文件描述符
- FD_CLR // 清空文件描述符
- FD_ISSET // 判断对应的文件描述符是否存在
- FD_ZERO //将fd_set 全部清零
范例 1
FD_SET(int fd, fd_set *fdset); //将fd加入set集合
FD_CLR(int fd, fd_set *fdset); //将fd从set集合中清除
FD_ISSET(int fd, fd_set *fdset); //检测fd是否在set集合中,不在则返回0
FD_ZERO(fd_set *fdset); //将set清零使集合中不含任何fd
网友评论