码迷,mamicode.com
首页 > 其他好文 > 详细

select系统调用

时间:2021-02-01 11:41:08      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:select   修改   失败   int   timeval   eval   null   结构   事件   

1 #include <sys/select.h>   
2 int select(int maxfdps, fd_set *readset, fd_set *writeset, fd_set *exceptset,struct timeval *timeout);

  maxfdps:被监听的文件描述符(fd)的数量;

  readset:结构指针类型(readset指向一个结构体),该结构体仅包含一个内置的整型数组,表示可读事件对应的fd集合,该数组中的每一位(bit)标记一个fd。由于fd集合是用内置数组表示的,所以能够容纳的fd的数量有限,限制了select能够同时处理的fd的数量;
  writeset(可写事件),exceptset(异常事件)同上;
  timeout:结构指针类型,设置select函数的超时时间,该结构体包含两个long型变量,分别表示表示秒数和微秒数。
  返回值:给timeout的两个成员变量均传递0,select立即返回;传递NULL,select一直阻塞,直到某个fd就绪或者程序捕获到一个信号时,select才返回。
      select成功,返回就绪的fd(含可读,可写和异常事件对应的fd)的数量(超时时间内没有fd就绪,返回0);
      select失败,返回-1。

  应用程序调用select函数时,传入感兴趣的fd和超时时间,select调用返回时,内核修改fd_set数组通知应用程序哪些fd已经就绪,修改timeval的成员通知应用程序阻塞了多久。
  采用一系列宏来访问fd_set中的位:

1 #include <sys/select.h>   
2 int FD_ZERO(int fd, fd_set *fdset);   //清除所有位,置0int FD_CLR(int fd, fd_set *fdset);   //清楚某一位fd,置0
3 int FD_SET(int fd, fd_set *fd_set);   //设置某一位fd,置1
4 int FD_ISSET(int fd, fd_set *fdset); //测试某一位fd是否被置1

 

 

 

 

select系统调用

标签:select   修改   失败   int   timeval   eval   null   结构   事件   

原文地址:https://www.cnblogs.com/yongjin-hou/p/14348786.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!