Linux應用程式之按鍵響應

2021-07-25 17:52:52 字數 1745 閱讀 6672

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和...