Russian Qt Forum
Март 29, 2024, 13:17 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: обработка нажатия клавиш с клавиатуры(POSIX,GCC, XUbuntu)  (Прочитано 6119 раз)
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« : Апрель 21, 2017, 12:34 »

Пытаюсь считать нажатия кнопок на клавиатуре с помощью событий.
Хочу считывать события с /dev/input/event*. Вроде как  должен быть файл связанный с клавиатурой.
Запускаю программу из под рута.
Но почему-то
Код:
ret = read(*((int*)fd),&event,sizeof(struct input_event));
Выдает -1.

Не могу понять  Непонимающий
Помогите разобраться.

Вот код программы:
Код
C
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <fcntl.h>
#include <termios.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <signal.h>
#include <linux/input.h>
 
#define EV_PRESSED 1
 
//INIT DEVICE KEYBOARD
int init_keyboard(int *fd)
{
//file buffer keyboard
char *keyboard = "/dev/input/event3";
 
if(getuid() != 0){
printf("You are not root! This may not work...\n");
return -1;
}
 
if((*fd = open(keyboard,O_RDONLY)) == -1){
printf("%s is not a valid keyboard. \n",keyboard);
return -1;
}
 
fcntl(*fd,F_SETFL,FNDELAY);
 
printf("file %s opened\n",keyboard);
 
return 0;
}
 
//ROUTINE KEY_PRESSED
void* update_keyboard(void *fd)
{
struct input_event event;
int ret;
 
while(1){
usleep(100000);
ret = read(*((int*)fd),&event,sizeof(struct input_event));
printf("ret = %d\n",ret);
if(event.type == EV_KEY){
printf("EV_KEY\n");
if(event.value == EV_PRESSED){
if(event.code == KEY_ESC){
printf("!!!__PRESSED_ESC__!!!");
}
}
}
}
}
 
int main(void)
{
int fd_keyboard,status;
pthread_t thread_keyboard;
 
if(!init_keyboard(&fd_keyboard)){
//create thread read key of keyboard
printf("create thread keyboard read\n");
status = pthread_create(&thread_keyboard,NULL,update_keyboard,(void*)(&fd_keyboard));
if(status != 0){
printf("error create thread keyboard read\n");
exit(-1);
}
 
if(!pthread_detach(thread_keyboard)){
printf("detach thread read keyboard\n");
}
       }
 
       while(1){
        // MAIN LOOP
       }      
 
return 0;
}
 
 
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« Ответ #1 : Апрель 24, 2017, 23:07 »

Похоже, я наверное задал очень глупый вопрос В замешательстве
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.061 секунд. Запросов: 22.