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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pix是什么意思(pixio)

    本文会介绍cGAN和pix2pix,并在TensorFlow中使用pix2pix模型。一、cGAN原理使用GAN可以无监督生成全新的图片,比如使用GAN生成MNIST数字,虽然可以生成数字,但是不能生成确定的数字。如果希望控制生成的结果,例如生成数字1,此时就要用到cGAN了。cGAN的全称为ConditionalGenerativeAdversarialNet…

    2022年4月12日
    81
  • 操作系统的功能

    操作系统的功能

    2021年11月29日
    48
  • pycharm哪个版本_pycharm版本选择

    pycharm哪个版本_pycharm版本选择Pycharm各大版本Pycharm作为python最常见的IDE,常见的有三种版本专业版:功能强大,适合开发者,需要通过付费或学生认证才能使用社区版:可以供广大python爱好者免费使用,具备常用的python库,可以实现基本的python用法,用于试验在工作中出现的错误教育版:基于社区版发展而来,也是免费使用,其功能与社区版相似,但是更适合学生,新人学习,由教师可以创建工程、教学…

    2022年8月28日
    2
  • java 流水线模式_流水线设计模式实现

    java 流水线模式_流水线设计模式实现这是关于管道实现的设计问题。以下是我的天真实施。流水线设计模式实现接口在管道的各个步骤/阶段:在流水线的步骤/阶段的publicinterfaceStep{publicUexecute(Tinput);}具体实现:publicclassStepOneimplementsStep{@OverridepublicIntegerexecute(Integerinput){r…

    2022年8月14日
    10
  • 实例分割论文_图像实例分割

    实例分割论文_图像实例分割作者丨youtober@知乎(已授权)来源丨https://zhuanlan.zhihu.com/p/412675982编辑丨极市平台导读本文综述基于实例分割的最新进展和发展历程,首先介…

    2022年8月23日
    7
  • allure 报告[通俗易懂]

    allure 报告[通俗易懂]一、简介二、下载安装三、报告生成四、环境配置五、Python使用allure方法一、简介官方文档:https://docs.qameta.io/allure/二、下载安装1、linux下载安装先检查是否安装npm:whichnpm 未安装npm的话:curl–silent–locationhttps://rpm.nodesource.com/setup_10.x|bash- 安装:yuminstall-ynodejs …

    2022年7月26日
    21

发表回复

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

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