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

关于select()的问题

    来源: 互联网  发布时间:2016-07-06

    本文导语:  本帖最后由 piedgogo 于 2009-09-25 09:25:49 编辑 select的工作是这样的:在指定时间内,“监视”读和写集合,还有异常集合里是否有真值,若有,则返回两个集合里的真值。 往读集合、写集合和异常集合里添加文件用FD_SET...

本帖最后由 piedgogo 于 2009-09-25 09:25:49 编辑
select的工作是这样的:在指定时间内,“监视”读和写集合,还有异常集合里是否有真值,若有,则返回两个集合里的真值。
往读集合、写集合和异常集合里添加文件用FD_SET
检查返回的集合里是否有某文件用FD_ISSET
清空读集合、写集合和异常集合用FD_ZERO。

问题是,闹不懂,到底是怎样判断这个真值的呢?是里面的文件处于可读或者可写状态就可以了吗?或者是文件有改变?

|
似乎设计的不合理,
比如检查读就绪,
fd_set rset,arset;//arset是rset的拷贝,select时候传arset,因为轮询会改变集合状态
FD_SET(fd,&rset);
//这样操作
while(1){
       memcpy(&arset,&rset,sizeof(rset));
       ........
}

|
我也尝试过好几次,也出现了上述问题,还真不知道怎样解决,顶一下

|

简单来说,read, write, send, recv不会阻塞。
      Ttys and sockets are ready for reading or writing, respectively, if a
      read() or write() would not block for one or more of the following
      reasons:

           +  input data is available.

           +  output data can be accepted.

           +  an error condition exists, such as a broken pipe, no carrier,
              or a lost connection.

      Sockets select true on exceptions if out-of-band data is available.

      Pipes are ready for reading if there is any data in the pipe, or if
      there are no writers left for the pipe.  Pipes are ready for writing
      if there is room for more data in the pipe AND there are one or more
      readers for the pipe, OR there are no readers left for the pipe.
      select() returns the same results for a pipe whether a file descriptor
      associated with the read-only end or the write-only end of the pipe is
      used, since both file descriptors refer to the same underlying pipe.
      So a select() of a read-only file descriptor that is associated with a

 Hewlett-Packard Company            - 1 -   HP-UX Release 11i: November 2000

 select(2)                                                         select(2)

      pipe can return ready to write, even though that particular file
      descriptor cannot be written to.

|
fd_set 是一个结构体
用FD_SET将要监视的文件句柄加入到fd_set集合中
调用select的时候,内核会处理,如果fd就绪,就会至fd_set中的相应位位真,并返回就绪fd的个数
调用select之后,就可以使用FD_ISSET来判断fd是否就绪,使用轮询的方式.

|
处于可读或者可写状态, 或者有异常

|
楼主你google一下啊 很多信息  多看几个就明白了

|
也有类似问题 关注一下 帮顶

|
学习了

    
 
 
 
本站(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