当前位置:  技术问答>linux和unix

菜鸟提问:关于read函数的问题

    来源: 互联网  发布时间:2016-02-12

    本文导语:  在linux下用串口接收数据的时候,采用read函数读取串口数据,但是一进入read的循环,程序总是停在那里,跳不出来.不知道为什么. 程序如下:  void readshort(int fd)                             {        unsigne...

在linux下用串口接收数据的时候,采用read函数读取串口数据,但是一进入read的循环,程序总是停在那里,跳不出来.不知道为什么.
程序如下: 
void readshort(int fd)                            
{
       unsigned int n=5000;   
       int nread;
       char buff[512];
       while (n)                                    //循环读取数据
       {
             printf("start to read datan");
             while((nread = read(fd, buff, 512))>0)
             { 
                                                    // printf("tLen %d",nread); 
                   buff[nread] = '';   
                   printf( "%s", buff); 
             }
             n--;
       } 
       printf("readshort completed");
}

程序执行到这个循环语句的时候,总是跳不出来.是不是我把要读的字节设成512太大了?因为串口那边的数据肯定是小于512的,理论上串口没有数据发过来的时候应该是可以结束读取的呀.

|
INT32 ReadComPort (INT32 ComPort, void *data, INT32 datalength)
{
    INT32           retval = 0;
static fs_read;
    FD_ZERO (&fs_read);
    FD_SET (fd[ComPort], &fs_read);
    tv_timeout.tv_sec = 0;//TIMEOUT_SEC (datalength, GetBaudrate ());
    tv_timeout.tv_usec = 150000;//TIMEOUT_USEC;

    retval = select (fd[ComPort] + 1, &fs_read, NULL, NULL, &tv_timeout);
    if (retval)
        return (read (fd[ComPort], data, datalength));
    else
        return (-1);
}

|
我曾写过一篇文章介绍过select,想了解的话请参考:select函数与I/O多路转接 
http://blog.csdn.net/linyt/archive/2007/08/02/1722445.aspx

此外,也可以把它设为非阻塞的,代码如下:
void set_fl(int fd, int flags)
...{
    int val;
    //获取属性
    if((val = fcntl(fd, F_GETFL, 0)) 0)
nread = read(fd, buff, status))

或则用select来控制超时.

|
tv_timeout.tv_sec:单位是秒
tv_timeout.tv_usec单位是百万分之一秒

合在一起就是表示总的时间

    
 
 

您可能感兴趣的文章:

  • 菜鸟问题:linux各个函数的实现源代码在哪?
  • 菜鸟问题:Linux下 ioctl 函数到底在哪?
  • (菜鸟请教)还有修改/etc/passwd文件用什么函数呢?
  • 菜鸟问题, GCC 编译出的目标码中函数前面有没有下划线呀?
  • 菜鸟求助linux最最基本的HELLO函数错误
  • 菜鸟级的问题,介绍各种类和函数的文档
  • 菜鸟问题:如何提供 Linux 下的函数库?
  • 菜鸟请教,函数内部存在系统调用时栈空间多12byte的原因
  • 菜鸟求助关于fork、wait、exec族函数的综合问题
  • [菜鸟问题]一个很简单的程序,提示找不到函数
  • 一个网络编程中send函数的菜鸟问题
  • 菜鸟求助 apue的例子 关于fcntl函数
  • 菜鸟提问:包是什么概念?
  • 菜鸟提问:请问Unix下面有没有类似Win32下_T这样的宏?
  • 菜鸟提问,我怎么装redhat7。1
  • 菜鸟提问了,关于编译问题?
  • 菜鸟 提问
  • 菜鸟提问:送分题目(内容请进)
  • 菜鸟在线提问:有关弹出式菜单!
  • 菜鸟提问linux
  • 菜鸟我要提问了。关于编译的问题
  • 菜鸟提问:有关运行时错误
  • 菜鸟提问:gcc编译后为什么不能运行?
  • 菜鸟提问,请大虾帮助!!!
  • 菜鸟提问………
  • 菜鸟提问
  • 菜鸟提问:在Unix下如何象Windows一样抓屏?
  • 菜鸟提问。
  • 菜鸟再次提问!!!
  • 在linux下如何用gcc连接远端Oracle数据库?(菜鸟提问,大虾快答)
  • 菜鸟提问,送分机会来了.
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • ----菜菜鸟第三问:-菜鸟菜问:JAVA如何求 根号、开次方? -----
  • 菜鸟问一个关于j2ee的菜鸟问题
  • 怎样从一个菜鸟级的java programer升级到一个菜鸟级的java developer
  • 一个连菜鸟都算不上的菜鸟
  • 菜鸟求问菜鸟问题 ,域名绑定
  • ===菜鸟系列===:写过毕业论文的前辈请进!!!菜鸟散分啦!!!!
  • gcc问题---菜鸟发问之一,老大们帮忙啊!!菜鸟分不多,只好给这点了,对不起!!
  • 菜鸟又来问菜鸟问题了
  • 菜鸟的Linux练习疑问……
  • 菜鸟刚学jsp,还不知道怎么和sql server2000的数据库相连,我已经把odbc配好了,谁能给我一段和数据库相连的并显示所有数据的代码!菜鸟
  • 菜鸟写的俄罗斯方块,请多多批评!
  • 小问题,你一定能够帮忙!——菜鸟请求帮忙!!
  • 一个菜鸟的请求: 哪位前辈能给晚辈讲讲“匿名类”
  • ※菜鸟送分之一※ Red Hat Linux 的最高版本是多少?
  • 菜鸟问题:在Java中如何接收从键盘输入的字符串?
  • ★菜鸟问:怎么在RED HAT LINUX7.2中用169上网??
  • 菜鸟问题~~快点进来拿分
  • 菜鸟菜问题1
  • 如何解压光盘上的gz文件到某个目录?(Linux 超级菜鸟问题之一)
  • 菜鸟问题:如何在Solaris下配置显卡和显示器


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3