当前位置:  技术问答>linux和unix

关于select的问题 求教

    来源: 互联网  发布时间:2015-11-22

    本文导语:  如果有socket的fd ,USB的fd,窜口的fd ,是用select函数。   调用select后,得到的准备的fd是不是只可能是一个,还是说也可能有多个fd可以读,可以写?   还是说select后,只有一个fd read准好好了  或只有一个fd 写...

如果有socket的fd ,USB的fd,窜口的fd ,是用select函数。

  调用select后,得到的准备的fd是不是只可能是一个,还是说也可能有多个fd可以读,可以写?

  还是说select后,只有一个fd read准好好了  或只有一个fd 写准备好了。不可能超过2个fd

|
大致如此:
select(rfdset, wfdset...)
{
if(FD_ISSET(fd1..))
{
read到缓存
FD_SET(usb_fd, &wfdset);
}
if (FD_ISSET(usb_fd) {
进行写操作。

}
}

|
顺序跟select没关系,是你的应用的逻辑,自己控制。

|
select(I/O多工机制)  
表头文件  #include
#include
#include
 
定义函数  int select(int n,fd_set * readfds,fd_set * writefds,fd_set * exceptfds,struct timeval * timeout);
 
函数说明  select()用来等待文件描述词状态的改变。参数n代表最大的文件描述词加1,参数readfds、writefds 和exceptfds 称为描述词组,是用来回传该描述词的读,写或例外的状况。底下的宏提供了处理这三种描述词组的方式:
FD_CLR(inr fd,fd_set* set);用来清除描述词组set中相关fd 的位
FD_ISSET(int fd,fd_set *set);用来测试描述词组set中相关fd 的位是否为真
FD_SET(int fd,fd_set*set);用来设置描述词组set中相关fd的位
FD_ZERO(fd_set *set); 用来清除描述词组set的全部位
 
参数  timeout为结构timeval,用来设置select()的等待时间,其结构定义如下
struct timeval
{
time_t tv_sec;
time_t tv_usec;
};
 
返回值  如果参数timeout设为NULL则表示select()没有timeout。
 
错误代码  执行成功则返回文件描述词状态已改变的个数,如果返回0代表在描述词状态改变前已超过timeout时间,当有错误发生时则返回-1,错误原因存于errno,此时参数readfds,writefds,exceptfds和timeout的值变成不可预测。
EBADF 文件描述词为无效的或该文件已关闭
EINTR 此调用被信号所中断
EINVAL 参数n 为负值。
ENOMEM 核心内存不足
 
范例  常见的程序片段:fs_set readset;
FD_ZERO(&readset);
FD_SET(fd,&readset);
select(fd+1,&readset,NULL,NULL,NULL);
if(FD_ISSET(fd,readset){……}

|
理论上是任意多个,select后你要逐个判断。

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间javax.accessibility类accessiblestate的类成员方法: selected定义及介绍
  • 究竟怎么样取得的<select name="select_user" size="8" multiple>值
  • java命名空间javax.accessibility类accessiblestate的类成员方法: selectable定义及介绍
  • man select 结果返回 No manual entry for select
  • java命名空间javax.swing.tree类defaulttreeselectionmodel的类成员方法: selection定义及介绍
  • select <0时调用exit(0),为什么程序没有退出,而是继续执行select了?
  • java命名空间javax.swing.tree类defaulttreecellrenderer的类成员方法: selected定义及介绍
  • insert into select和select into的使用和区别介绍
  • java命名空间java.awt.event类itemevent的类成员方法: selected定义及介绍
  • select+read 读服务器发送过来的数据, 假设服务器调用close后, 客户端的select是否返回这个socket可读?
  • java命名空间javax.swing类defaultbuttonmodel的类成员方法: selected定义及介绍
  • JDBC里select sum和select返回的字段类型不一样
  • java命名空间javax.swing.text.html类html.tag的类成员方法: select定义及介绍
  • sql代码:select database select all table
  • java命名空间javax.swing.text.html类html.attribute的类成员方法: selected定义及介绍
  • Oracle中select 1和select *的区别
  • java命名空间javax.swing.plaf.synth接口synthconstants的类成员方法: selected定义及介绍
  • jquery下拉select控件操作方法分享(jquery操作select)
  • java命名空间javax.sound.midi类shortmessage的类成员方法: song_select定义及介绍
  • INSERT INTO SELECT语句与SELECT INTO FROM语句的一些区别
  • java命名空间javax.swing类jfilechooser的类成员方法: cancel_selection定义及介绍
  • select into 和 insert into select 两种表复制语句


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3