• ioctl 函数的FIOREAD参数


    在学习ioctl 时常常跟 read, write 混淆。其实 ioctl 是用来设置硬件控制寄存器,或者读取硬件状态寄存器的数值之类的。

    而read,write 是把数据丢入缓冲区,硬件的驱动从缓冲区读取数据一个个发送或者把接收的数据送入缓冲区。

     ioctl(keyFd, FIONREAD, &b)

    得到缓冲区里有多少字节要被读取,然后将字节数放入b里面。

    接下来就可以用read了。

    read(keyFd, &b, sizeof(b))

    这两个可以用在按键控制上,先是检测按键是否被按下,如果被按下就放在B里,然后user 在读取按键对应数值。

    Listing - Getting the number of bytes in the input buffer. 
    清单 - 读取串行端口输入缓冲区中的字节数 
    #include <unistd.h> 
    #include <termios.h>

    #incldue <sys/ioctl.h> //这个头文件一定要包含,不然编译不通过
    int fd; 
    int bytes; 
    ioctl(fd, FIONREAD, &bytes);  

    eg:

    读取标准输入的信息

    #include<stdio.h>

    #include<stdlib.h>

    #include<sys/ioctl.h>

    #include<errno.h>

    int kbhit(){

      int i;

      if(ioctl(0,FIONREAD,&i)<0){

            printf("ioctl failed, error=%d ",errno);

            exit(1);

      }

      return i;

    }

    main(){

    int i=0;

    int c=' ';

    system("stty raw -echo" );

    printf("enter 'q' to quit " );

    for(;c!='q';++i){

      if(kbhit()){

        c=getchar();

        printf(" got %c, on iteration %d",c,i);

      }

    }

    system("stty cooked echo" );

    return 0;

    }

  • 相关阅读:
    Unity3D AssetBundle相关
    [转]Unity3D新手引导开发手记
    努力多彩
    js sendBeacon
    js document.activeElement及使用
    js requestAnimationFrame
    js 1+'2' == '1'+'2'
    js scrollIntoViewIfNeeded
    汉字 3个字节
    js 浅拷贝和深拷贝
  • 原文地址:https://www.cnblogs.com/-colin/p/7909249.html
Copyright © 2020-2023  润新知