日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ioctl之FIONREAD

發布時間:2023/12/10 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ioctl之FIONREAD 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在學習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;

}

總結

以上是生活随笔為你收集整理的ioctl之FIONREAD的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。