亚洲国产精品人久久,亚洲va国产日韩欧美精品色婷婷,久久久久88色偷偷,免费人成黄页在线观看国际

17站長網

17站長網 首頁 網站 服務器 查看內容

Linux字符終端如何用鼠標移動一個紅色矩形詳解

2022-10-6 09:41| 查看: 1538 |來源: 互聯網

一切皆文件! UNIX已經說了。埃里克雷蒙德這樣說的,不服嗎? 既然 /dev/fb0 被抽象成了顯示器,可以在字符終端通過操作映射了 /dev/fb0 的內存在屏幕上畫32bit真彩圖,那么如何操作鼠標鍵盤呢? /dev/input/mouse

一切皆文件! UNIX已經說了。埃里克雷蒙德這樣說的,不服嗎?

既然 /dev/fb0 被抽象成了顯示器,可以在字符終端通過操作映射了 /dev/fb0 的內存在屏幕上畫32bit真彩圖,那么如何操作鼠標鍵盤呢?

/dev/input/mouse0 可以用來讀取鼠標事件。當你在字符終端cat它并移動鼠標時,它貌似告訴你有事情發生了,但是你卻無法解讀:


為了找到解讀它的正確方法,要么谷歌,要么百度,要么還有一個最直接的方法,那就是查Linux內核源碼中關于mouse0這個文件的read回調函數:

static ssize_t mousedev_read(struct file *file, char __user *buffer, size_t count, loff_t *ppos) { struct mousedev_client *client = file->private_data; struct mousedev *mousedev = client->mousedev; // mousedev_client結構體里查找到ps2的大小是6個字節。 signed char data[sizeof(client->ps2)]; int retval = 0; spin_lock_irq(&client->packet_lock); if (!client->buffer && client->ready) { // 這里就是核心了,繼續跟過去 mousedev_packet(client, client->ps2); client->buffer = client->bufsiz; } ...

我們看看 mousedev_packet 是如何組裝包的:

static void mousedev_packet(struct mousedev_client *client, signed char *ps2_data) { struct mousedev_motion *p = &client->packets[client->tail]; ps2_data[0] = 0x08 | ((p->dx < 0) << 4) | ((p->dy < 0) << 5) | (p->buttons & 0x07); ps2_data[1] = mousedev_limit_delta(p->dx, 127); ps2_data[2] = mousedev_limit_delta(p->dy, 127); p->dx -= ps2_data[1]; p->dy -= ps2_data[2]; ...

非常明白,我不管別的,我也沒有動機去學,我現在就是想知道鼠標的X,Y坐標:

  • p->dx,p->dy從名字上和從代碼上都可以看出,這是 相對于上一次 的坐標的變化!

所有信息都有了。

那么,現在,可以寫代碼了:

#include #include #include #include #include // 正方形邊長為100個像素點 #define LENGTH 100 // 顯示器顯存的抽象 unsigned int *mem = NULL; // 保存上一次的屏幕 unsigned int *old_mem = NULL; // 屏幕信息 static struct fb_var_screeninfo info; int mouse_fd, fb_fd; // 正方形涂成紅色 int start = 0xffff0000; int main(int argc, char **argv) { signed char mouse_event[6]; char rel_x, rel_y; int old_x = 0, old_y = 0; int abs_x = 0, abs_y = 0; mouse_fd = open("/dev/input/mouse0", O_RDONLY); fb_fd = open("/dev/fb0", O_RDWR); ioctl(fb_fd, FBIOGET_VSCREENINFO, &info); mem = (unsigned int *)mmap(NULL, info.xres*info.yres*info.bits_per_pixel/8, PROT_READ|PROT_WRITE, MAP_SHARED, fb_fd, 0); while(read(mouse_fd, &mouse_event[0], 6)) { int i, w, h; static int idx = 0; // 按照內核mousedev_packet的定義,解析出相對位移。 rel_x = (char) mouse_event[1]; rel_y = (char) mouse_event[2]; // 計算絕對位移 abs_x += rel_x; abs_y -= rel_y; if (abs_x <= 0 || abs_x >= info.xres - LENGTH || abs_y <= 0 || abs_y >= info.yres - LENGTH) { continue; } if (old_mem == NULL) { old_mem = (unsigned int *)mmap(NULL, info.xres*info.yres*info.bits_per_pixel/8, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANONYMOUS, -1, 0); if (old_mem == NULL) { exit(1); } } else { // 恢復上一次正方形區域里的像素 for (w = old_x; w < old_x + LENGTH; w++) { for (h = old_y; h < old_y + LENGTH; h++) { idx = h*info.xres + w; mem[idx] = old_mem[idx]; } } old_x = abs_x; old_y = abs_y; } // 保存當前的像素,以便下一次恢復 for (w = abs_x; w < abs_x + LENGTH; w++) { for (h = abs_y; h < abs_y + LENGTH; h++) { idx = h*info.xres + w; old_mem[idx] = mem[idx]; } } // 根據鼠標的位置涂抹紅色矩形 for (w = abs_x; w < abs_x + LENGTH; w++) { for (h = abs_y; h < abs_y + LENGTH; h++) { idx = h*info.xres + w; mem[idx] = start; } } } return 0; }

運行它,然后在字符終端移動鼠標,效果如下:

嗯,矩形隨著鼠標而移動,并且不會破壞任何所到之處的字符。

現在,我來回顧一下這個周末做的這些事情,意味著什么。

  • 我可以在字符終端上畫32位真彩圖;
  • 我可以檢測到鼠標鍵盤的事件并且反應。

這意味著,如果有時間和精力,我可以實現一個GUI系統了。

當然,GUI系統和網絡協議棧那是隔行如隔山,肯定會遇到超級多的麻煩,不是僅僅讀寫兩個文件:

  • /dev/fb0
  • /dev/input/mouse0

就可以搞定的。

事實上,真正的GUI系統從來不用這種方式。它們貌似在反抗著 UNIX一切皆文件 的理念,并且證明這樣會更好!哦,對了,Windows GUI的成功就是一個證明,還有后來最新版本的MacOS…

說什么字符終端,字符也是 畫出來的 。沒什么大不了的。只不過,想要用像素去設置字符,那就要了解一下 字符點陣 的information了…這又是另一個領域的話題。

本文最后更新于 2022-10-6 09:41,某些文章具有時效性,若有錯誤或已失效,請在網站留言或聯系站長:17tui@17tui.com
·END·
站長網微信號:w17tui,關注站長、創業、關注互聯網人 - 互聯網創業者營銷服務中心

免責聲明:本站部分文章和圖片均來自用戶投稿和網絡收集,旨在傳播知識,文章和圖片版權歸原作者及原出處所有,僅供學習與參考,請勿用于商業用途,如果損害了您的權利,請聯系我們及時修正或刪除。謝謝!

17站長網微信二維碼

始終以前瞻性的眼光聚焦站長、創業、互聯網等領域,為您提供最新最全的互聯網資訊,幫助站長轉型升級,為互聯網創業者提供更加優質的創業信息和品牌營銷服務,與站長一起進步!讓互聯網創業者不再孤獨!

掃一掃,關注站長網微信

大家都在看

  • 當我們在共享網絡訪問的時候,可能會遇到提示指定的網絡名不再可用的問題,這可能是由于我們的共享網絡出現了錯誤,也可能是被共享的對象所拒絕了。指定的網絡名 ......

    故障排除 2023-03-10
  • 1、首先進入到“百度”軟件中, 2、然后在其中輸入“百度識圖”, 3、之后點擊圖中的“開始使用”按鈕, 4、緊接著點擊右下角的“相冊”功能, 5、在相冊下 ......

    軟件教程 2023-02-17
  • 一、軟件沖突1、首先確認是否是應用程序沖突導致的。2、查看是否只有特定幾個游戲或應用會導致該問題。3、如果是應用沖突,那么只要卸載這些app就可以解決了。二 ......

    軟件教程 2022-12-27
  •   文/曹楊  原標題:誰還看電視?  爸爸戴一副老花鏡,媽媽戴一副近視鏡,一人坐在沙發,一人躺在床上,各自刷著自己關注的博主更新的短視頻。電視也許開著,但只是背景。  這樣的畫面,幾乎成了洛奇家的常 ...

    站長 2020-12-09
  • 圖片來源于簡書  文/郭開森 楊帆  陸玖財經準備開新欄目了,每周一創始人郭開森和楊帆合體郭德帆,對行業進行一些觀察和評論,第一篇我們仍是打算寫社區團購,這是當下最火的話題。  來過陸玖財經做客的朋友們...

    熱議 2020-12-07
  • 一、N100對比intel i3 1、N100的跑分達到了147210分,這個數據可以達到i3的七代級別。 2、在跑分上也是超越了大部分的I3七代CPU,不過比I3八代要弱勢一些。 3 ......

    硬件知識 2023-04-26
  • 電腦端:1、大家可以點擊右邊鏈接進入網頁版的百度網盤,進入之后點擊“去登錄”。https://pan.baidu.com/2、之后正確的輸入賬號密碼進行登錄就好啦。手機端:1 ......

    軟件教程 2022-12-27
  • 在填寫一些項目申請書中,總是免不了要選擇一些數字,但是在方框中如何插入數字,該怎么辦呢?那么下面就由學習啦小編給大家分享下word在方框里輸入數字的技巧, ......

    Word教程 2023-04-27
  • 8月15日消息 上周,有媒體報道前身為百度圖片的“榴蓮”APP含有大量不雅視頻內容被用戶舉報。對此,百度圖片官方進行了回應,百度圖片表示已經對報道中所涉及的“生吃旋風哥”等爭議內容進行了下線處理。 此外,百度...

    站長 2016-08-15
  • 迅雷前綴是什么 答:迅雷前綴是(magnet:?xt=urn:btih:)括號里的就是了。 我們只要在這段文字之后輸入后續的內容,就可以創建下載鏈接了。 1、磁力鏈接不基于文 ......

    軟件教程 2023-06-03
  • WPS Office手機版怎么加橫線?很多用戶還不知道WPS Office手機版怎么加橫線,WPS Office手機版怎么加橫線,WPS Office手機版怎么打橫線,WPS Office手機版怎么弄 ......

    WPS教程 2023-03-31
  • 一、內容特權。 1、半價點播。 許多站內視頻都需要付費觀看,而大會員用戶可以直接半價享受; 購買成功后的48h內無限次觀看。有部分的內容是只限在中國大陸內觀 ......

    軟件教程 2023-05-05
  • 藍奏云怎么打開別人分享的鏈接1、當我們獲得了鏈接以后,首先需要把鏈接粘貼進瀏覽器里回車進入。2、進入以后就會轉到這樣一個頁面,如果有密碼的話我們就輸入給 ......

    軟件教程 2023-03-16
  • 1、首先打開小米運動的“實驗室功能”。 2、接著點擊“門卡模擬”。 3、然后點擊“我知道了”。 4、最后貼近就可以刷卡成功了。...

    硬件知識 2023-05-17
  • 1、打開手機輕顏相機app,點擊“我的”,點擊“設置”,2、點擊“幫助與反饋”,3、點擊右下角“在線咨詢”即可聯系客服,詢問自己的問題啦!...

    軟件教程 2023-03-16
  • 答:華為P系列: 華為p40,華為p40plus,華為p50,華為p50e,華為p60 華為mate系列: 華為mate40,華為mate50,華為mate50e,華為mate60 華為nova系列: 華為n ......

    鴻蒙系統 2023-04-24
  • 近期有用戶反映,電腦在更新Windows 11 Insider Preview 25252.1000后,出現了應用和已壓縮的文件點擊毫無反應,拖拽都不行,只能從開始菜單打開的情況,這是怎 ......

    windows11 2022-12-13
  • 可見單元格就是不包括隱藏或者篩選篩選后隱藏起來的單元格區域。方法:篩選或隱藏數據,復制需要粘貼的值,在目標單元格區域左上角的第一個單元格處右擊,選擇【 ......

    WPS教程 2022-12-10
  • 答:驍龍8+更好。 驍龍7+gen2實際上就是驍龍8+的低配版本。 在一些其他的核心架構方面都是保持一致的,比如說CPU的架構、GPU的架構等等。 驍龍7+和驍龍8+具體 ......

    硬件知識 2023-04-06
  • 1、先打開機頂盒進入主界面,并且使用遙控器打開設置。 2、然后選擇“賬號與安全”,并且進入。 3、最后往下面翻就可以看到“ADB調試”的選項,直接開啟就行了 ......

    軟件教程 2023-06-01
  • 答:在3DMark壓力測試當中,顯卡需要超高97%才能夠算合格,證明顯卡的穩定性是過關的。 1、一般的默認情況下在2500~3000分就算很正常的了。 2、分數越高說明顯卡 ......

    軟件教程 2023-06-01
  • 文件被win10系統誤報病毒自動刪除了如何進行恢復?有用戶下載了某些破解軟件卻被Win10系統誤認為是病毒文件而自動刪除,當然系統自帶殺毒軟件其實挺不錯的,就是有時候會誤報,大家遇到這種情況的時候就希望把誤刪的...

    windows10 2022-11-20
  • win11系統如何釋放掉系統默認保留的存儲空間?一般情況下,Windows會保留一些存儲空間,以便設備獲得良好性能和成功更新。但是當出現系統盤儲存空間不足時,我們會將幾個G的保留空間釋放出來,以解燃眉之急。本期教...

    windows11 2022-11-17
  •   文/黎明  一場針對中國互聯網巨頭的反壟斷風暴正在醞釀,而且這次動真格了。  11月10日,國家市場監管總局發布《關于平臺經濟領域的反壟斷指南(征求意見稿)》,要加大對互聯網巨頭涉嫌壟斷的調查和監管。 ...

    熱議 2020-11-14
  • 我們經常用WPS的時候,如果需要輸入波浪號~,會發現鍵盤上的波浪號輸入之后在最上面,但是為了美觀,我們希望波浪號顯示在中間。這里總結了三個方法分享給大家 ......

    WPS教程 2023-02-18
  • 答:不一樣。 字類不同、數量不同、使用也不同。 1、字類不同 仿宋gb2312只包含符合GB2312標準的簡體字,仿宋包含所有的簡體字,包括特殊的繁體字。 2、版本不 ......

    軟件教程 2023-02-17
  • 1、下載番茄作家助手,登錄你自己的賬號進入。2、在首頁這里可以看到你創建的書籍,或者新建一個小說,點擊這個黃色的編輯圖標。3、進入以后,再點擊“創建章節 ......

    軟件教程 2023-03-16
  • 答:中高端水平 i513500hx在處理器當中是處于一個中高端的水平。 i513500hx是第十一代酷睿處理器系列的一員,基礎頻率為2.4GHz,表現十分的不錯。 i513500hx介 ......

    硬件知識 2023-04-27
  • 羅技g304dpi燈顏色代表什么:1、藍色:這種情況是正常工作的顯示,如果說是常亮或者閃爍,那都沒有問題這是在正常工作呢。2、紅色:如果說是紅燈閃爍的話那就是 ......

    硬件知識 2023-03-16
  • 打開軟件,直接填寫就可以。 1、下載安裝easyconnect軟件, 2、打開easyconnect應用,在如圖所示的“服務器地址”一欄輸入如圖所示網址,點擊“連接”, 3、等 ......

    軟件教程 2023-04-03

熱門排行

    最近更新

      返回頂部
      亚洲国产精品人久久,亚洲va国产日韩欧美精品色婷婷,久久久久88色偷偷,免费人成黄页在线观看国际
      一区av在线播放| 色综合天天综合在线视频| 成人福利视频网站| 欧美精品一卡两卡| 国产精品毛片大码女人| 久久99久久精品欧美| 欧美性大战久久久久久久蜜臀| 91精品国产一区二区三区蜜臀| 91麻豆123| 在线综合视频播放| 欧美久久久久久久久中文字幕| 精品一区二区三区av| 97久久精品人人爽人人爽蜜臀 | 日韩三级.com| 午夜伊人狠狠久久| 欧美性高清videossexo| 夜夜精品视频一区二区| 一本色道亚洲精品aⅴ| 国产精品久久久久久久久久久免费看 | 欧美日韩国产中文| 亚洲国产欧美日韩另类综合| 91久久精品国产91性色tv| 中文字幕一区二区三区在线不卡| 国产成人99久久亚洲综合精品| 欧美精品一区二区久久久| 久久国产精品第一页| 日韩你懂的在线播放| 美腿丝袜一区二区三区| 欧美一区二区三区啪啪| 免费成人在线观看| 精品国产免费一区二区三区四区 | 精品成人在线观看| 国产精品自拍一区| 欧美激情一区二区三区蜜桃视频| 国产91精品一区二区麻豆亚洲| 国产欧美日韩卡一| 91同城在线观看| 亚洲国产日韩a在线播放性色| 欧美久久久久免费| 国内国产精品久久| 国产精品免费av| 色噜噜狠狠色综合欧洲selulu| 亚洲国产综合色| 日韩一级视频免费观看在线| 免费av成人在线| 国产午夜精品久久久久久免费视 | 日韩高清国产一区在线| 日韩精品一区二区三区在线观看 | 日本一区二区久久| 在线欧美日韩国产| 久久精品久久精品| 国产人妖乱国产精品人妖| 99r国产精品| 午夜精品在线视频一区| 精品国产91乱码一区二区三区 | 国产成都精品91一区二区三| 亚洲欧美日韩成人高清在线一区| 欧美日韩国产大片| 国内精品写真在线观看| 亚洲视频一区在线观看| 777欧美精品| 97久久精品人人爽人人爽蜜臀| 日韩高清在线观看| 亚洲欧美激情在线| 欧美一区二区观看视频| 99久久综合狠狠综合久久| 日本成人在线一区| 亚洲欧美日韩中文播放| 久久久亚洲午夜电影| 欧美私模裸体表演在线观看| 国内外成人在线视频| 亚洲电影一区二区三区| 国产日韩精品一区二区三区在线| 欧美少妇一区二区| 波多野结衣精品在线| 久久精品噜噜噜成人88aⅴ| 亚洲男人的天堂在线观看| 久久奇米777| 在线综合视频播放| 在线精品观看国产| 国产91精品一区二区| 久久精品99国产精品日本| 亚洲自拍与偷拍| 国产精品免费aⅴ片在线观看| 日韩一区二区在线观看视频| 99re这里只有精品视频首页| 国产一二精品视频| 免费在线成人网| 亚洲妇熟xx妇色黄| 亚洲欧美日韩国产手机在线| 欧美国产欧美亚州国产日韩mv天天看完整 | 欧美日韩综合不卡| 一本大道av一区二区在线播放| 国产精品一区二区三区乱码| 久久精品国产精品亚洲红杏| 亚洲二区在线视频| 亚洲综合丁香婷婷六月香| **网站欧美大片在线观看| 国产精品沙发午睡系列990531| 久久婷婷国产综合精品青草 | 久久综合久久久久88| 日韩一级视频免费观看在线| 欧美福利一区二区| 欧美另类高清zo欧美| 欧美日韩三级视频| 欧美精品粉嫩高潮一区二区| 欧美精品xxxxbbbb| 欧美美女bb生活片| 日韩网站在线看片你懂的| 日韩一区二区视频| 日韩美女一区二区三区四区| 日韩精品在线看片z| 日韩精品一区二区三区视频播放| 91精品国产综合久久精品麻豆| 欧美一区二区网站| 欧美成人a∨高清免费观看| 精品美女在线播放| 国产午夜精品久久久久久免费视| 国产女人18毛片水真多成人如厕| 欧美国产欧美综合| 一区二区三区日本| 日韩综合小视频| 免费在线观看精品| 国产精品88888| 色婷婷精品久久二区二区蜜臀av| 一本色道久久综合精品竹菊| 欧美伊人久久久久久午夜久久久久| 欧美三区在线观看| 日韩亚洲国产中文字幕欧美| 26uuu色噜噜精品一区二区| 国产精品欧美一区喷水| 一区二区三区中文字幕电影 | 久久成人免费网站| 成人性生交大片| 欧美在线free| 久久夜色精品国产噜噜av| 国产精品你懂的| 免费人成在线不卡| 成人小视频免费在线观看| 91福利视频网站| 精品久久久影院| 亚洲男同性恋视频| 久久不见久久见中文字幕免费| www.日韩在线| 91精品视频网| 国产精品国产三级国产三级人妇| 天天综合网 天天综合色| 国产伦精品一区二区三区免费| 91啪在线观看| 精品久久一二三区| 一区二区欧美在线观看| 国内精品免费在线观看| 欧美羞羞免费网站| 国产日韩欧美精品一区| 亚洲成人先锋电影| 成人av集中营| 日韩精品一区二区三区老鸭窝 | 亚洲人午夜精品天堂一二香蕉| 美女视频黄 久久| 欧美在线视频不卡| 国产精品久久久久久久久久久免费看| 日韩精品一级中文字幕精品视频免费观看| 国产成a人亚洲精| 91精品国产免费| 亚洲午夜电影在线| 成人精品免费视频| 日韩免费看的电影| 亚洲一区二区三区视频在线 | 日韩欧美国产精品| 亚洲国产精品综合小说图片区| 成人午夜视频免费看| 精品美女一区二区| 日本欧美一区二区| 欧美日韩一本到| 一区二区视频在线看| 暴力调教一区二区三区| 久久久精品免费观看| 美脚の诱脚舐め脚责91| 欧美日韩免费高清一区色橹橹| 亚洲视频免费看| 成人教育av在线| 国产精品午夜久久| 国产 日韩 欧美大片| 久久久久99精品一区| 黄一区二区三区| 精品国产免费视频| 韩国精品主播一区二区在线观看| 日韩一级精品视频在线观看| 午夜婷婷国产麻豆精品| 欧美在线观看禁18| 亚洲综合视频在线| 欧美日韩综合色| 日韩中文字幕麻豆| 91精品国产麻豆| 久久99精品一区二区三区| 日韩午夜激情av| 国精产品一区一区三区mba桃花| 精品欧美一区二区久久| 国产一区二区三区免费在线观看| 久久久精品免费网站|