Russian Qt Forum

Компиляторы и платформы => Linux => Тема начата: demaker от Апрель 21, 2017, 12:34



Название: обработка нажатия клавиш с клавиатуры(POSIX,GCC, XUbuntu)
Отправлено: demaker от Апрель 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;
}
 
 


Название: Re: обработка нажатия клавиш с клавиатуры(POSIX,GCC, XUbuntu)
Отправлено: demaker от Апрель 24, 2017, 23:07
Похоже, я наверное задал очень глупый вопрос :-\