当前位置: 技术问答>linux和unix
关于select()的问题
来源: 互联网 发布时间:2016-07-06
本文导语: 本帖最后由 piedgogo 于 2009-09-25 09:25:49 编辑 select的工作是这样的:在指定时间内,“监视”读和写集合,还有异常集合里是否有真值,若有,则返回两个集合里的真值。 往读集合、写集合和异常集合里添加文件用FD_SET...
往读集合、写集合和异常集合里添加文件用FD_SET
检查返回的集合里是否有某文件用FD_ISSET
清空读集合、写集合和异常集合用FD_ZERO。
问题是,闹不懂,到底是怎样判断这个真值的呢?是里面的文件处于可读或者可写状态就可以了吗?或者是文件有改变?
|
似乎设计的不合理,
比如检查读就绪,
fd_set rset,arset;//arset是rset的拷贝,select时候传arset,因为轮询会改变集合状态
FD_SET(fd,&rset);
//这样操作
while(1){
memcpy(&arset,&rset,sizeof(rset));
........
}
比如检查读就绪,
fd_set rset,arset;//arset是rset的拷贝,select时候传arset,因为轮询会改变集合状态
FD_SET(fd,&rset);
//这样操作
while(1){
memcpy(&arset,&rset,sizeof(rset));
........
}
|
我也尝试过好几次,也出现了上述问题,还真不知道怎样解决,顶一下
|
简单来说,read, write, send, recv不会阻塞。
Ttys and sockets are ready for reading or writing, respectively, if a
read() or write() would not block for one or more of the following
reasons:
+ input data is available.
+ output data can be accepted.
+ an error condition exists, such as a broken pipe, no carrier,
or a lost connection.
Sockets select true on exceptions if out-of-band data is available.
Pipes are ready for reading if there is any data in the pipe, or if
there are no writers left for the pipe. Pipes are ready for writing
if there is room for more data in the pipe AND there are one or more
readers for the pipe, OR there are no readers left for the pipe.
select() returns the same results for a pipe whether a file descriptor
associated with the read-only end or the write-only end of the pipe is
used, since both file descriptors refer to the same underlying pipe.
So a select() of a read-only file descriptor that is associated with a
Hewlett-Packard Company - 1 - HP-UX Release 11i: November 2000
select(2) select(2)
pipe can return ready to write, even though that particular file
descriptor cannot be written to.
|
fd_set 是一个结构体
用FD_SET将要监视的文件句柄加入到fd_set集合中
调用select的时候,内核会处理,如果fd就绪,就会至fd_set中的相应位位真,并返回就绪fd的个数
调用select之后,就可以使用FD_ISSET来判断fd是否就绪,使用轮询的方式.
用FD_SET将要监视的文件句柄加入到fd_set集合中
调用select的时候,内核会处理,如果fd就绪,就会至fd_set中的相应位位真,并返回就绪fd的个数
调用select之后,就可以使用FD_ISSET来判断fd是否就绪,使用轮询的方式.
|
处于可读或者可写状态, 或者有异常
|
楼主你google一下啊 很多信息 多看几个就明白了
|
也有类似问题 关注一下 帮顶
|
学习了