当前位置: 技术问答>linux和unix
请教大家一下linux下有关select模式的用法
来源: 互联网 发布时间:2015-10-23
本文导语: 请教大家一下linux下有关select模式的用法: 我用select模式来读取串口的数据。 用法如下: fd_set set; int fd; int count = 0; struct timeval timeout; ... FD_ZERO( &set ); FD_SET( fd, &set ); //超时为0,立刻返回 //因为我的程序只...
请教大家一下linux下有关select模式的用法:
我用select模式来读取串口的数据。
用法如下:
fd_set set;
int fd;
int count = 0;
struct timeval timeout;
...
FD_ZERO( &set );
FD_SET( fd, &set );
//超时为0,立刻返回
//因为我的程序只有一个进程,还要做别的事情,不想阻塞。
//所以我只想用轮询的方法来读取数据,超时设置为0。
//无数据就立刻返回。
timeout.tv_sec = 0;
timeout.tv_usec = 0;
count = select( fd + 1, &set, NULL, NULL, &timeout );
if( count > 0 )
{
if( FD_ISSET( fd, &set ) )
{
read(...);
}
}
可是这样总是读取不到数据。
请大家看看,是不是我用错了?
我用select模式来读取串口的数据。
用法如下:
fd_set set;
int fd;
int count = 0;
struct timeval timeout;
...
FD_ZERO( &set );
FD_SET( fd, &set );
//超时为0,立刻返回
//因为我的程序只有一个进程,还要做别的事情,不想阻塞。
//所以我只想用轮询的方法来读取数据,超时设置为0。
//无数据就立刻返回。
timeout.tv_sec = 0;
timeout.tv_usec = 0;
count = select( fd + 1, &set, NULL, NULL, &timeout );
if( count > 0 )
{
if( FD_ISSET( fd, &set ) )
{
read(...);
}
}
可是这样总是读取不到数据。
请大家看看,是不是我用错了?
|
关键在int fd上。这个fd是描述串口的吗?另外你select只监视一个描述符,那么count>0就已经表示FD_ISSET一定成立了。