Открыть системные вызовы в C на Linux
Вероятно, есть несколько проблем с кодом ниже. Нашел его в Интернете после поиска способа получить ввод с клавиатуры в Linux. Я проверил правильное событие для ввода с клавиатуры. Причина, по которой это кажется мне подозрительной, заключается в том, что независимо от того, что я поместил в путь к файлу, он всегда проходит проверку на ошибку (вызов open возвращает что-то больше 0). Что-то явно не так, поэтому предложения приветствуются.
Это не будет работать правильно, если вы не запустите exe как su.
Когда я хочу прочитать в своем нажатии клавиши, я просто использую что-то вроде fgets в дескрипторе файла в бесконечном цикле while (будет ли это работать)? Я хочу, чтобы он постоянно опрашивал ввод с клавиатуры. Любые советы по декодированию входных данных от события клавиатуры?
Еще раз спасибо! Этот мой проект может быть слишком амбициозным, так как прошло очень много времени с тех пор, как я занимался программированием.
#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
#include <fcntl.h>
#include <linux/input.h>
#include <unistd.h>
// Edit this line to reflect your filepath
#define FILE_PATH "/dev/input/event4"
int main()
{
printf("Starting KeyEvent Module\n");
size_t file; //will change this to int file; to make it possible to be negative
const char *str = FILE_PATH;
printf("File Path: %s\n", str);
error check here
if((file = open(str, O_RDONLY)) < 0)
{
printf("ERROR:File can not open\n");
exit(0);
}
struct input_event event[64];
size_t reader;
reader = read(file, event, sizeof(struct input_event) * 64);
printf("DO NOT COME HERE...\n");
close(file);
return 0;
}
2 ответа
Проблема здесь:
size_t file;
size_t без знака, поэтому он всегда будет>=0
это должно было быть:
int file;
открытый вызов возвращает что-то больше 0
open
возвращается int
, но вы вставили в беззнаковую переменную (size_t
обычно без знака), поэтому вы не можете определить, когда это <0