linux下的select用于串口接收数据时,select函数无法返回的问题
linux-dash
A beautiful web dashboard for Linux
项目地址:https://gitcode.com/gh_mirrors/li/linux-dash
免费下载资源
·
写串口程序接收数据时使用了select(fd+1,&readfds,&writefds,&exceptfds,NULL);
在接收线程里使用了select函数,还有另外一个线程有close(fd);即关闭串口
在调试过程中发现close之后,select函数仍然没有返回
后来查询资料得知,在socket编程中这样使用select是没问题的(如果是非正常断开,如意外断电,拔网线等情况,select也是无法检测到的);
因为在关闭socket时,你会接收到一条消息,所以select能返回;
但是在串口中,关闭端口是没有消息通知的,所以select无法知道,所以一直死在那,不会返回。
解决:
不使用select的无限等待模式,用等待超时;
struct timeval tv;
tv.tv_sec=5;
tv.tv_usec=0;
select(fd+1,&readfds,&writefds,&exceptfds,&tv);
如果哪位朋友有更好的解决方法请告知,谢谢
GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e
added ecosystem file for PM2 4 年前
5def40a3
Add host customization support for the NodeJS version 4 年前
更多推荐
已为社区贡献1条内容
所有评论(0)