当前位置: 技术问答>linux和unix
关于select()函数的使用问题
来源: 互联网 发布时间:2015-05-13
本文导语: 我使用select()进行文件的读写监控,对于同一个文件描述符fd1, 既控制读操作,又监控写操作,如下所示, FD_SET(fd1, &rfds); FD_SET(fd1, &wfds); select(maxfd, &rfds, &wfds, NULL, &vt_time); 请问,如果在时...
我使用select()进行文件的读写监控,对于同一个文件描述符fd1, 既控制读操作,又监控写操作,如下所示,
FD_SET(fd1, &rfds);
FD_SET(fd1, &wfds);
select(maxfd, &rfds, &wfds, NULL, &vt_time);
请问,如果在时间vt_time内既收到读操作又收到写操作,会两个都收到吗?即我用如下方式能否处理是否会漏调读或者写操作?
if(FD_ISSET(fd1, &rfds))
{
//add read operation here;
}
else if((FD_ISSET(fd1, &wfds))
{
//add write operation here;
}
FD_SET(fd1, &rfds);
FD_SET(fd1, &wfds);
select(maxfd, &rfds, &wfds, NULL, &vt_time);
请问,如果在时间vt_time内既收到读操作又收到写操作,会两个都收到吗?即我用如下方式能否处理是否会漏调读或者写操作?
if(FD_ISSET(fd1, &rfds))
{
//add read operation here;
}
else if((FD_ISSET(fd1, &wfds))
{
//add write operation here;
}
|
gz
..............select能这样用吗?
..............select能这样用吗?
|
哈哈,好象不能这样用
|
select可以同时监控很多描述符,判断的时候不能用else。但对普通文件,其描述符总是可读可写的,所以用select监控文件没有意义。
|
根据if语句的定义
只有你的套接字没有数据时,并且此时你的套接字可以发送才会走到else分支
这就要看你的设计思想是不是这样
如果你要两个都测试,那么去掉else
只有你的套接字没有数据时,并且此时你的套接字可以发送才会走到else分支
这就要看你的设计思想是不是这样
如果你要两个都测试,那么去掉else
|
1、可以都处理。
2、如果可写,会立即返回。如果不写,下一次会马上返回。
2、如果可写,会立即返回。如果不写,下一次会马上返回。