linux中的按鍵檢測通過迴圈讀取裝置檔案/dev/input/event[x](其中x可以為0,1,2…)裝置檔案獲取按鍵事件,一般由主線程迴圈獲取按鍵事件,然後通過訊息佇列通知其他子執行緒,從而做出響應。
在linux核心中,按鍵事件用input_event結構體描述,該結構體在標頭檔案中定義,同時該檔案還定義了有關按鍵事件的api函式介面、標準按鍵編碼等。
input_event結構體定義如下:
struct input_event ;
還定義了常用標準按鍵編碼:
#define key_reserved 0
#define key_esc 1
#define key_1 2
#define key_2 3
#define key_3 4
#define key_4 5
#define key_5 6
#define key_6 7
在使用者態,我們只需要迴圈讀取裝置檔案/dev/input/eventx,就可以得到相應的鍵盤事件,**如下:
#include #include #include #include #define key_event_dev1_name "/dev/input/event1"
int syskeyscan(void);
key_fd = open(key_event_dev1_name, o_rdonly);
if(key_fd <= 0)
while(1)
}} }
close(key_fd);
return l_ret; }
int main(int arg, char *arc)
有時候,我們的的linux核心也可以把不同的按鍵封裝到不同的event中,例如數字鍵鍵盤事件通過event1通知使用者態,而功能鍵通過event0通知使用者態。此時我們可以使用poll函式來同時監測多個等待事件,若事件未發生,程序睡眠,放棄cpu控制權,直到有鍵盤事件發生,poll將喚醒睡眠的程序,並執行相應的操作。**如下:
#include #include #include #include #include #define key_event_dev0_name "/dev/input/event0"
#define key_event_dev1_name "/dev/input/event1"
int syskeyscan(void)
; struct pollfd key_fds[2] = ;
struct input_event key_event = ;
key_fd[0] = open(key_event_dev0_name, o_rdonly);
if(key_fd[0] <= 0)
key_fd[1] = open(key_event_dev1_name, o_rdonly);
if(key_fd[1] <= 0)
for(i = 0; i < 2; i++)
while(1)
}} }
close(key_fd[0]);
close(key_fd[1]);
return l_ret;
}int main(int argc, char *argv)
Linux應用程式 按鍵響應
linux中的按鍵檢測通過迴圈讀取裝置檔案 dev input eventx裝置檔案獲取按鍵事件,一般由主線程迴圈獲取按鍵事件,然後通過訊息佇列通知其他子執行緒,從而做出響應。在linux核心中,按鍵事件用input event結構體描述,該結構體在標頭檔案中定義,同時該檔案還定義了有關按鍵事件的a...
Linux應用程式之檔案
檔案是具有永久性儲存 按照特定位元組順序組成的乙個有序的資料的集合。根據資料的儲存方式,可將檔案分為二進位制檔案和文字檔案,計算機的儲存在物理上是二進位制的,所以文字檔案與二進位制檔案的區別並不是物理上的,而是邏輯上的。這兩者只是在編碼層次上有差異。簡單來說,文字檔案是基於字元編碼的檔案,常見的編碼...
Linux按鍵響應測試
在linux核心中,input裝置用input dev結構體描述,使用input子系統實現輸入裝置驅動的時候,驅動的核心工作就是向系統報告按鍵 觸控螢幕 鍵盤 滑鼠等輸入事件 event,通過input event結構體描述 linux input.h 這個檔案定義了event事件的結構體,api和...