2楼 Linux下直接用read读串口可能会造成堵塞,或数据读出错误。然而用select先查询com口,再用read去读就可以避免,并且当 com口延时时,程序可以退出,这样就不至于由于com口堵塞,程序就死了。我的代码如下: bool ReadDevice( int hComm, unsigned long uLen, char* pData ) { int nread = 0; char inbuf[uLen]; char buff[uLen]; memset( inbuff, '\0', uLen ); memset( buff, '\0', uLen ); fd_set readset; struct timeval tv; int MaxFd = 0; int c = 0; int z; do { FD_ZERO( &readset ); if( hComm >= 0 ) FD_SET( hComm, &readset ); MaxFd = hComm + 1; tv.tv_sec = 0; tv.tv_usec = 500000; do { z = select( MaxFd, &readset, 0, 0, &tv); }while( z==-1 && errno==EINTR ); if( z == -1 ) printf("select(2)\n"); if( z == 0 ) { hComm = -1; } if( hComm>=0 && FD_ISSET(hComm, &readset) ) { z = read( hComm, buff, uLen - c ); c += z; if( z == -1 ) { hComm = -1; } if( z > 0 ) { buff[ z + 1 ] = '\0'; strcat( inbuff, buff ); memset( buff, 0x00, uLen ); } else { hComm = -1; } } }while( hComm >= 0 ); memcpy( pData, inbuff, c ); return true; } |
Linux下用select查询串口数据
转载上一篇: linux中select()函数分析
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Oceanbase为啥新入数据select慢
oceanbase运维,it小白,OB数据库
数据库 数据 MySQL Oceanbase -
linux实时查看java接口数据
本文详细介绍了如何在Linux环境中结合Java Spring Boot应用程序和Python脚本来实时(或定期)查看Java接口的数据。
Python Java 应用程序 Linux 实时接口数据 -
linux select函数
linux select 开发
linux 开发 select