select 函数 使用

告知内核等待某一或某些事件发生  而后唤醒进程  或超时返回
   int select(int maxfdp1, fd_set *readset, fd_set *writeset, fd_set *excepset,
              const struct timeval *timeout);    返回准备好的描述符数量 超时返0错误-1 
主要功能:对I/O读 写 异常的监控;定时功能


   struct timeval{
     long tv_sec;    秒
     long tv_usec;   毫秒
   }; //可以作为定时器存在,也可以用来做sleep函数的高精版
   1.该参数用以指明等待的时间:
     a.永远等待  设置NULL指针
     b.不等待立即返回  2个元素都设为0
     c.等待一定时间  具体设置之
   2.并不十分精确  最大精度10ms(系统约束)  但强于sleep()的1s
   3.因为有const修饰符  所以该值不会被修改  若要计算时间2次在select前后调用时间函数求差

   readset writeset excepset用以标示我们需要内核进行检测读写错误的描述符
   1.excepset只有两种情况  一个是out-of-band  另一个书上没详细说
   2.用以组整数数组来标识  每一位对应一个描述符  如:array[0]指示0~31个描述符

     常用4个宏进行操作
     void FD_ZERO(fd_set *fdset);           清除所有位
     void FD_SET(int fd, fd_set *fdset);    设置位
     void FD_CLR(int fd, fd_set *fdset);    关闭位
     void FD_ISSET(int fd, fd_set *fdset);  查询该位是否设置
   3.任何一个XXXset设为NULL表示对该状态不关心  全NULL可以代替sleep()使用
   4.value-result参数  送时表明哪些描述符需要检测  返回时表明哪些描述符准备完毕

   maxfdp1意思是最大描述符号加1
   FD_SETSIZE定义fd_set描述符数量  但通常过大所以用这个参数减小系统负担 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值