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读到了需要...
  • u014650722
  • u014650722
  • 2016年06月08日 08:32
  • 3969

用select查询串口数据

http://blog.chinaunix.net/uid-26921272-id-3307716.html        select读主要实现的功能是,在一定时间内不停地看串口有没有数据...
  • tianruxishui
  • tianruxishui
  • 2014年08月09日 18:08
  • 611

基于select的Linux串口485读写,文件描述符 fd_set

  • 2018年02月05日 17:03
  • 5KB
  • 下载

Android串口通信:串口读写

Android串口通信:串口读写公司有个项目要用到串口通信,同事有写好一个DEMO,用的时候发现会有问题,从jni读串口数据时,经常会被截断,修改select延时还是无济于事,于是想到用JAVA直接去...
  • burly
  • burly
  • 2016年01月13日 18:04
  • 9790

Linux串口编程select方式

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

利用select接收串口数据 亲测可用小demo

#include #include #include #include #include #include ...
  • badagougou
  • badagougou
  • 2017年12月12日 15:34
  • 131

安卓 串口读取数据遇到的问题

安卓串口操作,在网上一定会找到很多关于谷歌的开源项目,把它的源码拿过来之后,经过编译发现无法读取数据。 接下来就是寻找收发数据失败原因的过程。 1、在Application中出现Inval...
  • lnniyunlong99
  • lnniyunlong99
  • 2016年06月07日 10:56
  • 2997

android读写串口

android读写串口(friendlyarm) import com.friendlyarm.AndroidSDK.HardwareControler; import android...
  • lili1985516
  • lili1985516
  • 2012年10月23日 18:39
  • 7491

通过ajax方式从后台查询出数据并填入前台的select中

首先需要清空之前下拉框中的内容,否则会出现选项重复的情况,根据url的路径查询出select中所要展示的list,判断list是否为空,如为空,需要置入空行,如不为空,用jquery取到select后...
  • zhangyisheng1
  • zhangyisheng1
  • 2012年10月09日 10:50
  • 898

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

原文地址::http://tieba.baidu.com/p/94875093   linux中select()函数分析   select()的机制中提供一fd_set的数据结构,实际上是一l...
  • xqhrs232
  • xqhrs232
  • 2012年03月15日 16:37
  • 3330
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Linux下用select查询串口数据
举报原因:
原因补充:

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