当前位置: 技术问答>linux和unix
pc和开发板上使用select多路复用,不同的现象问题请教。
来源: 互联网 发布时间:2017-03-05
本文导语: 1.开发板串口控制台上,没有输出,并且控制台无法输入了,当按reset键重启时,控制台上输出一大堆there is timeout, 2.PC控制台正常,输出there is timeout 请问哪位在调试时遇到这种情况,简化的测试代码如下: void m...
1.开发板串口控制台上,没有输出,并且控制台无法输入了,当按reset键重启时,控制台上输出一大堆there is timeout,
2.PC控制台正常,输出there is timeout
请问哪位在调试时遇到这种情况,简化的测试代码如下:
void main()
{
int e;
struct timeval select_timeout;
select_timeout.tv_sec = 0;
select_timeout.tv_usec = 3000000;
while(1)
{
e = select (1, NULL, NULL, NULL, (void*)&select_timeout) ;
if(e>0)
{
fprintf(stderr,"there is in proc!n");
}
else
{
fprintf(stderr,"there is timeout!n");
}
}
}
2.PC控制台正常,输出there is timeout
请问哪位在调试时遇到这种情况,简化的测试代码如下:
void main()
{
int e;
struct timeval select_timeout;
select_timeout.tv_sec = 0;
select_timeout.tv_usec = 3000000;
while(1)
{
e = select (1, NULL, NULL, NULL, (void*)&select_timeout) ;
if(e>0)
{
fprintf(stderr,"there is in proc!n");
}
else
{
fprintf(stderr,"there is timeout!n");
}
}
}
|
你的select到底是为了睡觉还是监听键盘呢, 如果是监听键盘那么rset没有设置。
但无论如何,这个代码是有错的,应该在每次进入select之前重新设置timeout结构体内的时间,看以下manpage:
但无论如何,这个代码是有错的,应该在每次进入select之前重新设置timeout结构体内的时间,看以下manpage:
On Linux, the function select modifies timeout to reflect the amount of time not slept; most other implementations do not do this. This causes problems both
when Linux code which reads timeout is ported to other operating systems, and when code is ported to Linux that reuses a struct timeval for multiple selects
in a loop without reinitializing it. Consider timeout to be undefined after select returns.
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。