matlab select函数,select函数
阻塞方式block,就是进程或是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回。使用Select就可以完成非阻塞non-block,就是进程或线程执行此函数时不必非要等待事件的发生,一旦执行肯定返回,以返回值的不同来反映函数的执行情况,如果事件发生则与阻塞方式相同,若事件没有发生则返回一个代码来告知事件未发生,而进程或线程继续执行,所以效率较高。select能够监视我们需要监视的文件描述符的变化情况。
(一)首先说明两个结构体:
1:struct fd_set一个存放文件描述符(file descriptor),即文件句柄的聚合,实际上是一long类型的数组,
每一个数组元素都能与一打开的文件句柄(不管是Socket句柄,还是其他文件或命名管道或设备句柄)建立联系,建立联系的工作由程序员完成;
FD_ZERO(fd_set *fdset):清空fdset与所有文件句柄的联系。
FD_SET(int fd, fd_set *fdset):建立文件句柄fd与fdset的联系。
FD_CLR(int fd, fd_set *fdset):清除文件句柄fd与fdset的联系。
FD_ISSET(int fd, fdset *fdset):检查fdset联系的文件句柄fd是否可读写,>0表示可读写。
2:struct timeval用来代表时间值,有两个成员,一个是秒数tv_sec,另一个是毫秒数tv_usec。
(二)下面介绍select()函数原型:
1:int select(int nfds, fd_set *rdfds, fd_set *wtfds, fd_set *exfds, struct timeval *timeout)
2:ndfs:select中监视的文件句柄数,一般设为要监视的文件中的最大文件号加一。
3:rdfds:select()监视的可读文件句柄集合,当rdfds映象的文件句柄状态变成可读时系统告诉select函数返回。
这个集合中有一个文件可读,select就会返回一个大于0的值,表示有文件可读,
如果没有可读的文件,则根据timeout参数再判断是否超时,
若超出timeout的时间,select返回0,若发生错误返回负值,
可以传入NULL值,表示不关心任何文件的读变化;
4:wtfds: select()监视的可写文件句柄集合,当wtfds映象的文件句柄状态变成可写时系统告诉select函数返回。
如果这个集合中有一个文件可写,select就会返回一个大于0的值,表示有文件可写,
如果没有可写的文件,则根据timeout参数再判断是否超时,
若超出timeout的时间,select返回0,若发生错误返回负值,
可以传入NULL值,表示不关心任何文件的写变化。
5:exfds:select()监视的异常文件句柄集合,当exfds映象的文件句柄上有特殊情况发生时系统会告诉select函数返回。
6:timeout:select()的超时结束时间。
这个参数它使select处于三种状态,
第一,若将NULL以形参传入,即不传入时间结构,就是将select置于阻塞状态,
一定等到监视文件描述符集合中某个文件描述符发生变化为止;
第二,若将时间值设为0秒0毫秒,就变成一个纯粹的非阻塞函数,不管文件描述符是否有变化,
都立刻返回继续执行,文件无变化返回0,有变化返回一个正值;
第三,timeout的值大于0,这就是等待的超时时间,即select在timeout时间内阻塞,
超时时间之内有事件到来就返回了,否则在超时后不管怎样一定返回,返回值同上述。
7:返回值:负值:select错误
0:等待超时,没有可读写或错误的文件
正值:某些文件可读可写或出错
(三)下面是一个有三个套接字句柄的例子
int sa, sb, sc;
sa = socket(...);
connect(sa,...);
sb = socket(...);
connect(sb,...);
sc = socket(...);
connect(sc,...);
FD_SET(sa, &rdfds);/* 分别把3个句柄加入读监视集合里去 */
FD_SET(sb, &rdfds);
FD_SET(sc, &rdfds);
int maxfd = 0;
if(sa > maxfd) maxfd = sa;/* 获取3个句柄的最大值 */
if(sb > maxfd) maxfd = sb;
if(sc > maxfd) maxfd = sc;
struct timeval tv;
tv.tv_sec = ... ;
tv.tv_usec = ...;
ret = select(maxfd + 1, &rdfds, NULL, NULL, &tv); /* 注意是最大值加1 */
if(ret
{
perror("select"); /* select函数出错 */
}
else if(ret == 0)
{
printf("超时\n"); /* 在设定的tv时间内,socket的状态没有发生变化 */
}
else
{
printf("ret=%d\n", ret);
if(FD_ISSET(sa, &rdfds)) /* 先判断一下sa这个被监视的句柄是否真的变成可读的了 */
{
recv(...); /* 读取socket句柄里的数据 */
}
......
}
matlab select函数,select函数相关推荐
- 第6章 I/O复用 select 和 poll 函数
I/O 复用的能力: 如果一个或多个 I/O 条件满足(例如,输入已准备好被读,或者描述字可以承接更多的输出)时,我们就被通知到. I/O 复用由函数 select 和 poll 支持. I/O 复用 ...
- select、bash函数初识及rpm命令详解
一.循环的特殊用法及select 二.bash函数基础 三.rpm命令 一.循环的特殊用法及select 1)while循环的特殊用法(遍历文件的每一行): while read line; do ...
- jQuery选择文本事件函数– select()方法
jQuery select() method triggers when a text in the text field or text area is selected. This method ...
- linux的poll_wait函数,select() 与 poll()两个函数接口的作用
select()函数的作用 系统调用select和poll的后端实现,用这两个系统调用来查询设备是否可读写,或是否处于某种状态.如果poll为空,则驱动设备会被认为即可读又可写,返回值是一个状态掩码 ...
- Linux中select函数的使用 select() Linux linux函数 select
阻塞式I/O编程有两个特点: 一.如果一个发现I\O有输入,读取的过程中,另外一个也有了输入,这时候不会产生任何反应.这就需要你的程序语句去用到select函数的时候才知道有数据输入. 二.程序去se ...
- inet_aton mysql_MySQL_IP处理函数inet_aton()和inet_ntoa()使用说明,MYSql的IP对int的转换函数 select i - phpStudy...
IP处理函数inet_aton()和inet_ntoa()使用说明 MYSql的IP对int的转换函数 select inet_aton(ip) from table_name; 网络地址: 192. ...
- MySQL讲义第 40 讲——select 查询之函数(3):数学函数
MySQL讲义第40讲--select 查询之函数(3):数学函数 文章目录 MySQL讲义第40讲--select 查询之函数(3):数学函数 一.数据准备 二.MySQL 数学函数介绍 1.ABS ...
- MySQL讲义第 39 讲——select 查询之函数(2):日期时间型函数
MySQL讲义第39讲--select 查询之函数(2):日期时间型函数 文章目录 MySQL讲义第39讲--select 查询之函数(2):日期时间型函数 一.数据准备 二.MySQL 日期时间型函 ...
- I/O复用:select和poll函数
<UNIX网络编程卷1:套接字联网API(第3版)> - 第6章- I/O复用 I/O模型 在介绍select和poll两个函数之前, 整体回顾下Unix下5种I/O模型的基本区别 阻塞式 ...
- mysql within 函数_SQL基础----(四)复杂的子查询(select within select)
(一) 关键知识点 1.1 消化阶梯任何知识点,均可遵循此消化路径 1.2 功能点 1.2.1 视图案例选中视图,右键刷新,将会呈现新创建的视图选中具体视图,右键弹出功能菜单,选择对应功能项注意事项 ...
最新文章
- cacti系列(一)之cacti的安装及配置监控mysql服务
- php 经纬度 摩卡 转换,WGS84经纬度坐标与WEB摩卡托坐标转换
- Java 爬虫--类似Python的requests库--HttpClient, HttpAsyncClient--Maven
- 神经科学家发现神经元网络可以拉伸或压缩其活动以控制时间
- python学了有什么用处-python教程有什用《学习python有什么好的用处》
- 对人工智能问题的提问
- 生成元(Digit Generator ,ACM/ICPC Seoul 2005 ,UVa 1583)
- 【视频课】生成对抗网络经典任务,详解基于GAN的图像生成算法!
- [转]FFT倒序算法—雷德算法
- Yii实现分页的两种方法
- 五家共井java_算法练习02:五家共井
- Windows Mobile,用C#更改网络连接(SSID、IP Address、Subnet Mask、Gatew... (转)
- 复频域求零输入响应_第十四章 动态电路的复频域分析 习题答案
- 推销员(codevs 5126)
- 【iOS开发】理解 IBOutlet 和 IBAction
- 解决Nginx出现403 forbidden
- 2018.08.22 NOIP模拟 string(模拟)
- 搏一搏,单车变摩托!华为天才少年耗时四月将自行车强势升级为自动驾驶
- samba 指定的网络名不再可用
- 2021年12月电子学会图形化四级编程题解析含答案:棕熊大战