在Linux上用C打开系统调用

时间:2014-02-11 14:07:43

标签: c linux-device-driver

以下代码可能存在一些问题。在搜索了在linux中获取键盘输入的方法之后在网上找到它。我已经验证了键盘输入的正确事件。它对我来说似乎有点可疑的原因是无论我放在文件路径中,它似乎总是通过错误检查(open调用返回大于0的东西)。有些事情显然是错误的,所以欢迎提出建议。

除非您将exe作为su运行,否则这将无法正常运行。

当我想读取我的击键时,我是否只是在无限循环中使用文件描述符上的fgets之类的东西(甚至可以工作)?我希望它能够不断轮询键盘输入。有关解码键盘事件输入的任何提示?

再次感谢!我的这个项目可能过于雄心勃勃,因为我做了任何编码已经很长时间了。

#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 个答案:

答案 0 :(得分:2)

问题在于:

size_t file;

size_t是无符号的,因此它总是> gt = = 0

应该是:

int file;

答案 1 :(得分:0)

  

open调用返回大于0的内容

open会返回int,但您输入的是无符号变量(size_t通常是无符号的),因此您无法检测到它何时为<0