ioctl与FIONREAD

ioctl与FIONREADFIONREAD,就是返回缓冲区有多少字节。输入有个输入缓冲区,用ioctl(0,FIONREAD,&nread);能得到缓冲区里面有多少字节要被读取。值放在nread里面了。然后就可以read了。nread=read(0,buffer,nread);

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

在学习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;

}

总言之:

FIONREAD,就是返回缓冲区有多少字节。
输入有个输入缓冲区,用

ioctl(0,FIONREAD,&nread);

能得到缓冲区里面有多少字节要被读取。值放在 nread里面了。

然后就可以 read 了。nread = read(0,buffer,nread);

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • HTTPS IP直连问题小结

    HTTPS IP直连问题小结背景任何一个移动 APP 项目都离不开网络接入功能 提升网络接入的质量几乎是所有移动项目的需求 很多项目都会引入 HTTPDNS 作为网络接入最基础也是最重要的优化之一 HTTPDNS 的核心是后台下发某个域名对应的最优 IP 基本点的可做到就近接入 即下发该域名终端就近地同运营商的 IP 好一点的则根据线上用户实际测速数据下发最优的 IP 而终端只需在 HTTP 接入时 将 URL 中的 HOST 从域名直接替换为后台下

    2025年6月22日
    1
  • 内存分配——静态存储区 栈 堆 与static变量

    内存分配——静态存储区 栈 堆 与static变量一、内存基本构成   可编程内存在基本上分为这样的几大部分:静态存储区、堆区和栈区。他们的功能不同,对他们使用方式也就不同。   静态存储区:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。它主要存放静态数据、全局数据和常量。   栈区:在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的

    2022年6月10日
    33
  • 静态数据成员和静态成员函数

    静态数据成员和静态成员函数转载自 https blog csdn net computer liuyun article details c 中的 static 静态数据成员和静态成员函数应该是让大家比较头疼的东西 好像也是找工作公司面试中常常问到的东西 我自己也深有体会 在学习 c 的过程中 总感觉 static 很烦人 但是又是一个必须懂的东西 所以今天就对静态数据成员和静态成员函数坐下小结哈 一

    2025年12月2日
    3
  • 如何锁定表头和表行同时锁定_jquery表头固定列

    如何锁定表头和表行同时锁定_jquery表头固定列前段时间需要这个功能,但是找了很多都不能完美的实现,不是只能锁定表头,就是浏览器兼容问题什么的,在此就自己做了一个锁定表头和列的js方法,依赖于JQuery。如使用jQuery1.9.x及以上版本,需

    2022年8月5日
    13
  • PAT乙级-【题目+解答】汇总(100%原创/100%完成)

    PAT乙级-【题目+解答】汇总(100%原创/100%完成)PAT乙级-【题目+解答】汇总PAT乙级-AC全解汇总PAT乙级解答集合

    2022年6月13日
    28
  • lscpu命令详解

    lscpu的使用描述:  此命令用来显示cpu的相关信息  lscpu从sysfs和/proc/cpuinfo收集cpu体系结构信息,命令的输出比较易读  命令输出的信息包含cpu数量,线程,核数,套接字和Nom-UniformMemeorAccess(NUMA),缓存等  不是所有的列都支持所有的架构,如果指定了不支持的列,那么lscpu将打印列,但不显示数据语法:

    2022年4月18日
    49

发表回复

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

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