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

select()返回值,算进去了非法的fd,为什么?

    来源: 互联网  发布时间:2017-04-13

    本文导语:  我写了个很小的程序,创建一个管道,创建一个文件,加上一个无效的fd,同时给select函数。 select函数第一次返回时竟然返回结果是3,也就是把无效的fd也算进去了。可是我并没有指定exceptfds啊,为什么返回3呢? 我...

我写了个很小的程序,创建一个管道,创建一个文件,加上一个无效的fd,同时给select函数。
select函数第一次返回时竟然返回结果是3,也就是把无效的fd也算进去了。可是我并没有指定exceptfds啊,为什么返回3呢? 我觉得2000这个fd不应该算进去才是啊。

更奇怪的是,我是先write了这个管道,然后第一次调用select,检查是否可读的结果竟然是false。为什么?

源代码如下。

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

int main()
{
    int pFd[2];
    int ret=pipe(pFd);
    if( ret == -1 )
    {
        fprintf( stderr, "poll error, %s/n", strerror( errno ) );
        return 1;
    }
    write( pFd[1], "hello", 5 );

    int nfd = open( "/tmp/my.txt", O_CREAT | O_CLOEXEC );

    fd_set fds;
    FD_ZERO( &fds );
    FD_SET( pFd[ 0 ], &fds );
    FD_SET( nfd, &fds );
    FD_SET( 2000,&fds ); //无效的fd,如何被select算进了返回值? 我没有加入exceptfds啊
    timeval timeout = { 0, 0 };
    int retval = select( 2001, &fds, &fds, NULL, &timeout ); // none block
    if( retval 

    
 
 

您可能感兴趣的文章:

  • man select 结果返回 No manual entry for select
  • select+read 读服务器发送过来的数据, 假设服务器调用close后, 客户端的select是否返回这个socket可读?
  • JDBC里select sum和select返回的字段类型不一样
  • 关于select函数返回错误的处理
  • 有关select的返回时间问题
  • 为什么我的select不能返回
  • select没有返回?
  • insert into select和select into的使用和区别介绍 iis7站长之家
  • 如何得到一个resultSet的长度,即一条select语句返回了多少符合条件记录
  • AIX 5.3下select超时不返回的问题
  • 用select count(*) from xxx;在SQLPLUS查询返回2,可用rs.getInt(1)返回竟然是0!!!
  • select返回0的原因大致有哪些
  • select使用返回值,一个让我困惑的现象.
  • pro*c 里怎么将select 的返回内容赋值给变量
  • select立刻返回0,errno=0,根本没有等到超时的情况,为何
  • socket通信时,select一直返回超时的问题
  • 非阻塞方式socket中, 去读select返回的sockfd是否一定是非0值??如果读到的字节数比期望少有没有什么好的处理模式??
  • 关于unix网络编程select函数总是返回0的问题
  • 请帮忙看一下,为什么Linux下 select 总返回 0,windows下就正常
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • @@请教poll模式和select中的FD_SETSIZE
  • 关于select和FD_ISSET,看看我的想法对吗?
  • select()函数操作两个fd,一个fd能工作,另一个fd就一定失败.为何?
  • linux下的select函数以及fd_set结构体有人会用吗?我有点小问题想请教一下。
  • 能否限定select函数的fd下限?
  • fork,select,fd_set是什么关系
  • 多个客户端使用select的FD_ISSET问题
  • 对socket使用select(max_fd,&rd_set,&wr_set,&er_set,&timeout);当服务端断开TCP连接,客户端就会崩溃。怎么解决?谢谢
  • 那位帮忙::LINUX下 用select时有关FD_ISSET的疑惑!
  • java命名空间javax.accessibility类accessiblestate的类成员方法: selected定义及介绍
  • 究竟怎么样取得的<select name="select_user" size="8" multiple>值
  • java命名空间javax.accessibility类accessiblestate的类成员方法: selectable定义及介绍
  • select <0时调用exit(0),为什么程序没有退出,而是继续执行select了?
  • java命名空间javax.swing.tree类defaulttreeselectionmodel的类成员方法: selection定义及介绍
  • insert into select和select into的使用和区别介绍
  • java命名空间javax.swing.tree类defaulttreecellrenderer的类成员方法: selected定义及介绍
  • sql代码:select database select all table
  • java命名空间java.awt.event类itemevent的类成员方法: selected定义及介绍
  • Oracle中select 1和select *的区别
  • java命名空间javax.swing类defaultbuttonmodel的类成员方法: selected定义及介绍
  • jquery下拉select控件操作方法分享(jquery操作select)
  • java命名空间javax.swing.text.html类html.tag的类成员方法: select定义及介绍
  • INSERT INTO SELECT语句与SELECT INTO FROM语句的一些区别
  • java命名空间javax.swing.text.html类html.attribute的类成员方法: selected定义及介绍
  • select into 和 insert into select 两种表复制语句
  • java命名空间javax.swing.plaf.synth接口synthconstants的类成员方法: selected定义及介绍
  • select into与insert into select 表复制语句学习实例
  • java命名空间javax.sound.midi类shortmessage的类成员方法: song_select定义及介绍
  • SELECT INTO 和 INSERT INTO SELECT 两种表复制语句简单介绍
  • java命名空间javax.swing类jfilechooser的类成员方法: cancel_selection定义及介绍
  • SELECT INTO与INSERT INTO SELECT表复制语句实例分享


  • 站内导航:


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

    ©2012-2021,