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


相关推荐

  • Java volatile关键字作用

    Java volatile关键字作用当一个共享变量被volatile修饰时,它会保证修改的值立即被更新到主存“,这里的”保证“是如何做到的?和JIT的具体编译后的CPU指令相关吧?  volatile特性  内存可见性:通俗来说就是,线程A对一个volatile变量的修改,对于其它线程来说是可见的,即线程每次获取volatile变量的值都是最新的。  volatile的使用场景  通过关键字sychronize…

    2022年6月1日
    30
  • eve模拟器上虚拟服务器,没有真机怎么做实验?EVE模拟器了解一下

    eve模拟器上虚拟服务器,没有真机怎么做实验?EVE模拟器了解一下网络很重要的一个环节就是大量的实践操作,通过教程学习知识点,再用实践来验证这些知识学会了没有,如此反复。这样的问题也随之而来,初学网络连概念都刚刚建立,怎么才能接触到网络设备:交换机、路由器、防火墙等等?既然避免不了实验测试,离不开实验环境,这就给大家推荐一款最好用的模拟器——eve模拟器。EVE模拟器已经不仅可以模拟网络设备,也可以运行一切虚拟机。理论上,只要能将虚拟机的虚拟磁盘格式转换为qco…

    2022年6月11日
    47
  • 原生js生成二维码_js中怎么获取二维码信息

    原生js生成二维码_js中怎么获取二维码信息js生成二维码使用kjua生成二维码官网:https://larsjung.de/kju使用方法在官网下载js文件,在页面中引用即可,原生js实现,不需要引用其他依赖。<!DOCTYPEhtml><html> <head> <metacharset=”utf-8″> <title></title> </head> <body> <divid=”test”&

    2022年10月17日
    0
  • java XML转JSON格式

    java XML转JSON格式代码如下所示importjava.io.ByteArrayInputStream;importjava.io.File;importjava.io.InputStream;importjava.util.HashMap;importjava.util.LinkedList;importjava.util.List;importjava.util.Map

    2022年7月21日
    9
  • vs2008中向项目(以C#为例)添加要求管理员权限的属性(为了兼容vista的UAC)

    vs2008中向项目(以C#为例)添加要求管理员权限的属性(为了兼容vista的UAC)

    2021年8月23日
    88
  • 记录关于我与SCOM的事情

    记录关于我与SCOM的事情

    2022年3月13日
    35

发表回复

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

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