Linux下用select查询串口数据

原创 2005年05月30日 11:21:00

       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

1、串口的阻塞和非阻塞 阻塞的定义:        对于read,block指当串口输入缓冲区没有数据的时候,read函数将会阻塞在这里,一直到串口输入缓冲区中有数据可读取,read读到了需要...

Linux串口编程select方式

其中串口中的一些重要的设备如下; /*设置等待时间它最小接收字符*/   newtio.c_cc[VTIME] = 1;   newtio.c_cc[VMIN] = 0;   newt...
  • guoggn
  • guoggn
  • 2015年03月05日 15:57
  • 1532

linux中select()函数分析及Linux下用select查询串口数据

原文地址::http://tieba.baidu.com/p/94875093   linux中select()函数分析   select()的机制中提供一fd_set的数据结构,实际上是一l...

Linux下QT串口通过无线模块收发十六进制数据

前段时间写了一个关于Vimi-Net简要的收发码以及CRC校验的博客(http://blog.csdn.net/u011348999/article/details/16803829) 然后一直说把Q...

Linux下串口操作之数据拼接

Linux串口操作中,特别以非阻塞的方式读取和发送数据,做好进程之间的同步很重要。有时我们会发现这样一个问题,在进行read操作时,一次read不能获得一个完整的数据帧,这就好比你买了一个电脑,送货的...

linux下多线程多串口数据转发程序

linux下多线程多串口数据转发程序#include #include #include #include #include #include #include #include #i...
  • xxgxgx
  • xxgxgx
  • 2016年01月19日 11:17
  • 1659

Linux下串口操作之数据拼接

串口操作中,特别以非阻塞的方式读取和发送数据,做好进程之间的同步很重要。有时我们会发现这样一个问题,在进行read操作时,一次read不能获得一个完整的数据帧,这就好比你买了一个电脑,送货的先把显示器...
  • cghver
  • cghver
  • 2013年08月13日 16:46
  • 3615

Linux下使用USB转串口读取GPS数据

#include #include #include #include #include #include #include #include #include int set_opt(int fd...
  • hjc0321
  • hjc0321
  • 2013年06月17日 21:08
  • 1282

Linux下串口编程遇 接收数据错误问题及原因

近日在调试串口的时候发现,另一设备向我ARM板的串口发送0x0d,我接收之后变成了0x0a,这是问题一;另外当对方向我发送一串数据,如果其中有0x11,那么我总是漏收此数,这是问题二。 由于问题莫名...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Linux下用select查询串口数据
举报原因:
原因补充:

(最多只允许输入30个字)