当前位置: 技术问答>linux和unix
用select做多路复用时,臬知道是哪一个描述符可读?
来源: 互联网 发布时间:2015-08-31
本文导语: 是一个这样的问题: 我有一个fd_set,名为logset,里面放了三个FIFO描述符。 执行这样的语句: if( (select( max() + 1, &logset, NULL, NULL, NULL) ) > 0) read(); 其中max()是取最大的描述符。 这样当其中一个描述符准备好...
是一个这样的问题:
我有一个fd_set,名为logset,里面放了三个FIFO描述符。
执行这样的语句:
if( (select( max() + 1, &logset, NULL, NULL, NULL) ) > 0)
read();
其中max()是取最大的描述符。
这样当其中一个描述符准备好的时候,我怎么才能知道是哪一个准备好可以读了?
我有一个fd_set,名为logset,里面放了三个FIFO描述符。
执行这样的语句:
if( (select( max() + 1, &logset, NULL, NULL, NULL) ) > 0)
read();
其中max()是取最大的描述符。
这样当其中一个描述符准备好的时候,我怎么才能知道是哪一个准备好可以读了?
|
#include
#include
#include
#include
int
main(void) {
fd_set rfds;
struct timeval tv;
int retval;
/* Watch stdin (fd 0) to see when it has input. */
FD_ZERO(&rfds);
FD_SET(0, &rfds);
/* Wait up to five seconds. */
tv.tv_sec = 5;
tv.tv_usec = 0;
retval = select(1, &rfds, NULL, NULL, &tv);
/* Don鈚 rely on the value of tv now! */
if (retval)
printf("Data is available now.n");
/* FD_ISSET(0, &rfds) will be true. */
else
printf("No data within five seconds.n");
return 0;
}
#include
#include
#include
int
main(void) {
fd_set rfds;
struct timeval tv;
int retval;
/* Watch stdin (fd 0) to see when it has input. */
FD_ZERO(&rfds);
FD_SET(0, &rfds);
/* Wait up to five seconds. */
tv.tv_sec = 5;
tv.tv_usec = 0;
retval = select(1, &rfds, NULL, NULL, &tv);
/* Don鈚 rely on the value of tv now! */
if (retval)
printf("Data is available now.n");
/* FD_ISSET(0, &rfds) will be true. */
else
printf("No data within five seconds.n");
return 0;
}
|
楼上的注释里有那个,用FD_ISSET测试你所select的每一个描述符
|
FD_ISSET().
^_^
^_^
|
把logset清零,select之后用FD_ISSET()判断