を押します.


//アプリケーションの実装方法は2つあります.
△普段の実験はプロジェクトの経験を積むことであり、本格的なプロジェクトになると軽装して出陣することができるので、できると思って実験をしないでください.
1>selectシステムでモニタドライバを呼び出して読み取り可能かどうかをモニタします.キーが押されて読み取り可能であればread関数を呼び出してデータを読み取り(キー値はそのキーが押されています)、それから対応する操作を実行します(もともとテストしたアプリケーションがポーリングされているので、マルチスレッドを除く!)
2>キードライバに非同期通知を追加する方法で、キーを押すとドライバがアプリケーションに信号を送信し、アプリケーションが押した信号を受け取ってランプの点灯を制御する
3>もう1つの方法は、アプリケーションでreadボタンを押している間に点灯することです.
  //led_key_app3.c
  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 #include <unistd.h>
  4 #include <sys/ioctl.h>
  5 #include <sys/types.h>
  6 #include <sys/stat.h>
  7 #include <fcntl.h>
  8 #include <sys/select.h>
  9 #include <sys/time.h>
 10 #include <errno.h>
 11 #include<string.h>
 12
 13 void check_key(int buttons_fd, int leds_fd);
 14
 15 int main(void)
 16 {
 17     int buttons_fd;
 18     int leds_fd;
 19     //int save = 0;  
 20     //int j = 0;  
 21     buttons_fd = open("/dev/button_by_hui", 0);
 22     if (buttons_fd < 0) {
 23         perror("open device buttons");
 24         exit(1);
 25     }
 26
 27     leds_fd = open("/dev/leds_by_hui",0);
 28     if(leds_fd < 0) {
 29         perror("open device leds");
 30         exit(1);
 31     }
 32     ioctl(leds_fd, 0, 0);  // led    
 33
 34     while (1) {
 35         check_key(buttons_fd, leds_fd);
 36     }//end of while(1) 

 37
 38     close(buttons_fd);
 39     close(leds_fd);
 40     return 0;
 41 }
 42
 43 void check_key(int buttons_fd, int leds_fd)
 44 {
 45         static char save[6]={'0','0','0','0','0','0'};
 46         static char current_buttons[6] = {'0', '0', '0', '0', '0', '0'};
 47         int i;
 48         static unsigned char no_off;
 49         if (read(buttons_fd, current_buttons, sizeof current_buttons) != sizeof current_buttons) {
 50             perror("read buttons error
"); 51 exit(1); 52 } 53 if ((strncmp(save, current_buttons, 6)) != 0 ){ 54 for ( i = 0; i < sizeof (current_buttons) / sizeof (current_buttons[0]); i++) { 55 if (save[i] != current_buttons[i]) { 56 printf("The %d key is pressed!(no_off=%d)
", i+1, no_off); 57 ioctl(leds_fd, (~no_off)&1, i); 58 } 59 }// end of for 60 no_off = ~no_off; 61 } 62 }