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


相关推荐

  • javaweb教务管理系统源码_java做一个学生管理系统

    javaweb教务管理系统源码_java做一个学生管理系统刚学完javaweb,做个项目练手与巩固所学的知识,同时分享自己写的这个教务管理系统,同样也是为自己记下笔记。为以后复习有帮助。该系统没有用到框架的知识,一共花了7天写出来。所以非常适合javaweb初学者教务管理系统javaweb项目运行环境:window系统,ApacheTomcatv7.0.84、JDK1.8开发环境:J2EEeclipse、navicatformysql运用的技术…

    2022年10月16日
  • HDU-1498-50years,50colors(最大匹配, 枚举)

    HDU-1498-50years,50colors(最大匹配, 枚举)

    2021年7月6日
  • jsonObject转map_java 对象转map

    jsonObject转map_java 对象转map直接上代码,实现了对嵌套的对象进行转换。privateMap&amp;lt;String,Object&amp;gt;toMap(JSONObjectobject){Map&amp;lt;String,Object&amp;gt;map=newHashMap&amp;lt;String,Object&amp;gt;();Objectvalue;Stringkey;for(Iterator&amp;lt;?&

    2022年8月23日
  • 编程xml速度最快的语言_xml语言是什么的缩写

    编程xml速度最快的语言_xml语言是什么的缩写国际化多语言转换工具方案介绍当项目涉及到多语言国际化的时候,我们需要把string.xml翻译成其他国家语言,一般翻译公司会需要excel等格式文档,可是这翻译文件实在是不好整,幸好有大神做了个py工具实现string文件转excel.目前有两种方式:Localizable.strings2Excel(下载源码,然后在终端输入命令跑脚本进行文件转换)作者:CatchZeng,https://github.com/CatchZeng/Localizable.strings2ExcelL

    2022年8月22日
  • idea启动tomcat日志乱码

    idea启动tomcat日志乱码乱码样式:解决方案:如下图设置tomcat1.代码:-Dfile.encoding=UTF-82.进入设置界面:set—>editor—>fileencoding(全部设置为UTF-8)*(最重要)3.进入idea的安装文件中,bin文件下,修改idea.exe.vmoptions和idea64.exe.vmop…

    2022年6月20日
  • MSF搭建socks代理[通俗易懂]

    MSF搭建socks代理[通俗易懂]目录搭建代理添加路由​搭建Socks4a代理搭建Socks5代理连接代理搭建代理当我们通过MSF拿到一个机器的权限后,想通过MSF搭建socks代理,然后通内网。MSF中有三个代理模块,分别是socks4a、socks5、socks_unc。我们一般用socks4a和socks5进行代理。socks5可以设置用户名和密码。这里运行代理后,有时候MSF不会监听端口…

    2022年6月16日

发表回复

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

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