加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

unix select()调用:如何组合fd_sets?

发布时间:2020-12-15 21:56:13 所属栏目:安全 来源:网络整理
导读:我正在用C语言编写一个 Linux应用程序,它使用了2个独立的第三方库.两个库都是异步的,使用select().它们还提供了一个API,用于返回它们等待的文件描述符.我的目的是将这些传递给我自己的select(),然后在设置自己的fd值时将控制权返回给任何一个库. 我想我已经
我正在用C语言编写一个 Linux应用程序,它使用了2个独立的第三方库.两个库都是异步的,使用select().它们还提供了一个API,用于返回它们等待的文件描述符.我的目的是将这些传递给我自己的select(),然后在设置自己的fd值时将控制权返回给任何一个库.

我想我已经编写了大部分内容,但是在涉及select()参数时我遇到了麻烦:两个库都不提供单独的文件描述符,而是指向它们的读写fd_sets的指针.我需要将这些库中返回的fd_sets组合成一个用于读取的fd_set,一个用于写入的fd_set等.

关于如何将2个fd_sets组合成一个结果fd_set的任何建议?

附录对不起!我本来应该更清楚..这些库只返回fd_sets …我不知道每组中FD的数量,这样我就可以做一个for循环并单独设置每个FD ..是否有一种简单的方法可以确定这给出了一个fd_set?

解决方法

您可以通过循环遍历每个库可能已打开的所有可能的文件描述符以及每个返回的集合来设置您自己的fd_set,并相应地设置您的fd_set.这有点暴力,但遗憾的是选择界面非常原始.例如

fd_set *lib1_read_fds,*lib2_read_fds;
int fd;
fdset my_fd_set;
FD_CLR(&my_fd_set);
for (fd = 0; fd < FD_SETSIZE; fd++) {
    if (FD_ISSET(fd,lib1_read_fds) || FD_ISSET(fd,lib2_read_fds)) {
        FD_SET(fd,&my_fd_set);
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读