Linux應用程式 按鍵響應

2021-09-24 19:57:23 字數 1931 閱讀 3504

linux中的按鍵檢測通過迴圈讀取裝置檔案/dev/input/eventx裝置檔案獲取按鍵事件,一般由主線程迴圈獲取按鍵事件,然後通過訊息佇列通知其他子執行緒,從而做出響應。

在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"

intsyskeyscan

(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"

intsyskeyscan

(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 *ar**)

Linux應用程式之按鍵響應

linux中的按鍵檢測通過迴圈讀取裝置檔案 dev input event x 其中x可以為0,1,2 裝置檔案獲取按鍵事件,一般由主線程迴圈獲取按鍵事件,然後通過訊息佇列通知其他子執行緒,從而做出響應。在linux核心中,按鍵事件用input event結構體描述,該結構體在標頭檔案中定義,同時該...

Linux按鍵響應測試

在linux核心中,input裝置用input dev結構體描述,使用input子系統實現輸入裝置驅動的時候,驅動的核心工作就是向系統報告按鍵 觸控螢幕 鍵盤 滑鼠等輸入事件 event,通過input event結構體描述 linux input.h 這個檔案定義了event事件的結構體,api和...

Linux C 應用程式退出時的事件響應

define sighup 1 hangup sighup是unix系統管理員很常用的乙個訊號。許多後台服務程序在接受到該訊號後將會重新讀取它們的配置檔案。然而,該訊號的實際功能是通知程序它的控制終端被斷開。預設行為是終止程序。define sigint 2 interrupt 對於unix使用者來...