2714|4

3416

帖子

0

TA的资源

纯净的硅(高级)

楼主
 

【MXCHIP Open1081】FD_ISSET函数的讨论 [复制链接]

本帖最后由 ljj3166 于 2014-12-7 22:34 编辑

MXCHIP在API介绍中,对于FD系列的功能函数只是简单的一带而过

FD_ZERO(p)
清空指针 p指向的套接字集合

FD_SET(n, p)
在指针p 指向的套接字集合中增加套接字 n

FD_CLR(n, p)
在指针p 指向的套接字集合中删去套接字 n



FD_ISSET(n, p)
查看在指针p 指向的套接字集合中的套接字 n是否被置位,返回 1表示置位,返回0表示未被置位


虽然没有深入的介绍函数的作用
但是实际使用过程中,个人觉得FD_ISSET(n, p) 这个函数是非常重要的
它返回的值直接决定能否该套接字下能否进行数据的发送
譬如:
for(i=0;i<8;i++) {
      if (clientfd【i】
!= -1) {
        if (FD_ISSET(clientfd
【i】, &readfds)) {                                                
                                                tmp = get_tem();
                                                itostr(SEND_buff,tmp/100);
                                                strcat(SEND_buff,".");
                                                itostr(TMP_buff,tmp%100);
                                                strcat(SEND_buff,TMP_buff);
                                                itostr(AD_buff,ADC_ConvertedValue[0]);
                                                strcat(SEND_buff,"&");
                                                strcat(SEND_buff,AD_buff);
                                                SEND_str_len = strlen(SEND_buff)-1;
                                                send(clientfd
【i】, "Temperture&AD Value:", sizeof("Temperture&AD Value:"), 0);
                                                send(clientfd
【i】, SEND_buff, SEND_str_len, 0);
                                                send(clientfd
【i】, "\r\n", sizeof("\r\n"), 0);
        }
        else if (FD_ISSET(clientfd
【i】, &exceptfds))
          clientfd
【i】 = -1;
      }
    }
上面这段代码中,如果FD_ISSET被置位,才能够发送相关的数据

实际使用中,如果没有向OPEN1081发送数据的话,数据是不会被发送至受端的
再看:
for(i=0;i<8;i++) {
      if (clientfd
【i】 != -1) {
        if (!FD_ISSET(clientfd
【i】, &readfds)) {                                                
                                                tmp = get_tem();
                                                itostr(SEND_buff,tmp/100);
                                                strcat(SEND_buff,".");
                                                itostr(TMP_buff,tmp%100);
                                                strcat(SEND_buff,TMP_buff);
                                                itostr(AD_buff,ADC_ConvertedValue[0]);
                                                strcat(SEND_buff,"&");
                                                strcat(SEND_buff,AD_buff);
                                                SEND_str_len = strlen(SEND_buff)-1;
                                                send(clientfd
【i】, "Temperture&AD Value:", sizeof("Temperture&AD Value:"), 0);
                                                send(clientfd
【i】, SEND_buff, SEND_str_len, 0);
                                                send(clientfd
【i】, "\r\n", sizeof("\r\n"), 0);
        }
        else if (FD_ISSET(clientfd
【i】, &exceptfds))
          clientfd
【i】 = -1;
      }
    }

这段代码,FD_ISSET未被置位,则允许数据的发送




然通过这两段代码的测试,似乎可以理解,FD_ISSET其实是在检测通道是否有数据接收或者发送
如果有,则置位,否则复位。
很希望庆科的大神们能把这几个函数和通信的关系好好介绍一下

此帖出自无线连接论坛

最新回复

嗯  是庆科工程师回复的。   详情 回复 发表于 2014-12-12 08:49
点赞 关注
个人签名

So TM what......?

 


回复
举报

2

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

在早期UNIX系统开发中,为了解决IO口多路复用的问题,引入了select ,同时引入的还有FD_SETFD_ISSET等工具。最常见的用法是在socket编程中。这些工具的标准头文件是:

sys/select.h

我们的接口已经基本上标准化了,文档中不清楚的地方可以参考POSIX标准,见附件。不过需要注意的是,select中有个参数是execptfd,目前还不支持(如下)。




    
网络参考资料如下
  
    
http://mkssoftware.com/docs/man3/select.3.asp
  

POSIX.chm

5.64 MB, 下载次数: 3

此帖出自无线连接论坛

点评

z 这个算官方回复吗?  详情 回复 发表于 2014-12-11 17:20
 
 

回复

862

帖子

2

TA的资源

纯净的硅(初级)

板凳
 
学习了....年底了,送走一拨检查的又来一拨...眼看时间到了,没时间系统的学习一下MICO...希望过段时间闲下来好好看看
此帖出自无线连接论坛
个人签名水不撩不知深浅 人不拼怎知输赢
 
 
 

回复

3416

帖子

0

TA的资源

纯净的硅(高级)

4
 
zhuangjf 发表于 2014-12-11 11:02
在早期UNIX系统开发中,为了解决IO口多路复用的问题,引入了select ,同时引入的还有FD_SET,FD_ISSET等工具。最常见的用法是在socket编程中。这些工具的标准头文件是:
sys/select.h
我们的接口已经基本上标准化了,文档中不清楚的地方可以参考POSIX标准,见附件。不过需要注意的是,select中有个参数是execptfd,目前还不支持(如下)。
z 这个算官方回复吗?
此帖出自无线连接论坛

点评

嗯 是庆科工程师回复的。  详情 回复 发表于 2014-12-12 08:49
个人签名

So TM what......?

 

 
 

回复

2万

帖子

74

TA的资源

管理员

5
 
ljj3166 发表于 2014-12-11 17:20
z 这个算官方回复吗?
嗯  是庆科工程师回复的。
此帖出自无线连接论坛
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
个人签名

加油!在电子行业默默贡献自己的力量!:)

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
快速回复 返回顶部 返回列表