ioctl之FIONREAD

ioctl之FIONREAD在学习ioctl时常常跟read,write混淆。其实ioctl是用来设置硬件控制寄存器,或者读取硬件状态寄存器的数值之类的。而read,write是把数据丢入缓冲区,硬件的驱动从缓冲区读取数据一个个发送或者把接收的数据送入缓冲区。 ioctl(keyFd,FIONREAD,&b)得到缓冲区里有多少字节要被读取,然后将字节数放入b里面。接下来就可以

大家好,又见面了,我是你们的朋友全栈君。

在学习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> 
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\n “,errno);

        exit(1);

  }

  return i;

}

main(){

int i=0;

int c=’ ‘;

system(“stty raw -echo” );

printf(“enter ‘q’ to quit \n” );

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

  if(kbhit()){

    c=getchar();

    printf(“\n got %c, on iteration %d”,c,i);

  }

}

system(“stty cooked echo” );

return 0;

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/163624.html原文链接:https://javaforall.net

(0)
上一篇 2022年7月23日 上午7:00
下一篇 2022年7月23日 上午7:00


相关推荐

  • 树莓派教程收集_树莓派怎么玩

    树莓派教程收集_树莓派怎么玩很多教程树莓派交叉编译环境以及开发raspberrypi树莓派Kernel编译笔记懒兔子python+simplecv

    2022年10月14日
    6
  • MediaCodec基本原理及使用「建议收藏」

    MediaCodec基本原理及使用「建议收藏」MediaCodec类Android提供的用于访问低层多媒体编/解码器接口,它是Android低层多媒体架构的一部分,通常与MediaExtractor、MediaMuxer、AudioTrack结合使用,能够编解码诸如H.264、H.265、AAC、3gp等常见的音视频格式。广义而言,MediaCodec的工作原理就是处理输入数据以产生输出数据。具体来说,MediaCodec在编解码的过程中使用了一组输入/输出缓存区来同步或异步处理数据:首先,客户端向获取到的编解码器输入缓存区写入要编解码的数据并将其提交

    2022年4月19日
    152
  • 手机版java启动器,我的世界Launcher启动器

    手机版java启动器,我的世界Launcher启动器我的世界Launcher启动器是一款我的世界的助手,在这个工具中你可以自由体验像素玩法,还可以免费加入其中的挑战,这样玩家就可以轻松感受各种高难度的比拼,而且游戏中有许多关卡,可以让你更好的体验冒险竞技,接下来让我们加入游戏体验各种创意玩法,赶紧来这里下载体验吧!我的世界Launcher启动器游戏简介我的世界Launcher启动器,可以尽情体验不同的沙盒历险,多样的地图和玩法可以在这个虚拟世界里尽…

    2022年7月8日
    52
  • PyCharm教程[通俗易懂]

    PyCharm教程[通俗易懂]Pycharm介绍Pycharm安装Pycharm了解基础知识Pycharm快捷键Pycharm快捷方式PycharmOmniPycharmMacrosPycharmMicrosPycharm改进和编写代码PycharmConsolePycharmshellPycharm调试Pycharm版本控制集成PycharmHTML和CSS集成Py…

    2022年8月25日
    7
  • html前端小技巧—div半透明设置技巧

    html前端小技巧—div半透明设置技巧今天分享下 html 前端小技巧 div 半透明设置技巧 这篇文章 文中根据实例编码详细介绍 或许对大家的编程之路有着一定的参考空间与使用价值 需要的朋友接下来跟着云南仟龙 Mark 一起学习一下吧 代码如下 DOCTYPE tmlPUBLIC W3C DTDHTML4 01Transition EN http www w3 org TR html4 loose dtd html head head html

    2026年3月17日
    2
  • dao层和service层和control代码(Java简述抽象类和接口的区别)

    DAO层:DAO层叫数据访问层,全称为dataaccessobject,属于一种比较底层,比较基础的操作,具体到对于某个表的增删改查,也就是说某个DAO一定是和数据库的某一张表一一对应的,其中封装了增删改查基本操作,建议DAO只做原子操作,增删改查。Service层:Service层叫服务层,被称为服务,粗略的理解就是对一个或多个DAO进行的再次封装,封装成一个服务,所以这里也就不…

    2022年4月18日
    62

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号