Открыть системные вызовы в 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

Другие вопросы по тегам