[分享] 【MXCHIP Open1081】FD_ISSET函数的讨论

ljj3166   2014-12-7 22:32 楼主
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其实是在检测通道是否有数据接收或者发送 如果有,则置位,否则复位。 很希望庆科的大神们能把这几个函数和通信的关系好好介绍一下 本帖最后由 ljj3166 于 2014-12-7 22:34 编辑
So TM what......?

回复评论 (4)


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

sys/select.h

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




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

    POSIX.chm (2014-12-11 11:01 上传)

    5.64 MB, 下载次数: 3

点赞  2014-12-11 11:02
学习了....年底了,送走一拨检查的又来一拨...眼看时间到了,没时间系统的学习一下MICO...希望过段时间闲下来好好看看
水不撩不知深浅 人不拼怎知输赢
点赞  2014-12-11 17:09
引用: zhuangjf 发表于 2014-12-11 11:02
在早期UNIX系统开发中,为了解决IO口多路复用的问题,引入了select ,同时引入的还有FD_SET,FD_ISSET等工具。最常见的用法是在socket编程中。这些工具的标准头文件是:
sys/select.h
我们的接口已经基本上标准化了,文档中不清楚的地方可以参考POSIX标准,见附件。不过需要注意的是,select中有个参数是execptfd,目前还不支持(如下)。
z 这个算官方回复吗?
So TM what......?
点赞  2014-12-11 17:20
引用: ljj3166 发表于 2014-12-11 17:20
z 这个算官方回复吗?
嗯  是庆科工程师回复的。
加油!在电子行业默默贡献自己的力量!:)
点赞  2014-12-12 08:49
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复