zoukankan      html  css  js  c++  java
  • 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;

    }

  • 相关阅读:
    Angular2 表单
    PHP Windows环境部署
    CI 扩展 Service
    Angular2 组件生命周期
    linux 命令笔记
    CI 笔记一
    Angular2 管道
    Angular2 指令
    springboot整合Quartz实现动态配置定时任务
    vue-app开发入门
  • 原文地址:https://www.cnblogs.com/-colin/p/7909249.html
Copyright © 2011-2022 走看看