写串口程序接收数据时使用了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);
如果哪位朋友有更好的解决方法请告知,谢谢
linux下的select用于串口接收数据时,select函数无法返回的问题
最新推荐文章于 2022-04-04 11:10:43 发布