c++ - 如何从 Linux/dev/input/eventX 轮询输入

标签 c++ linux

我正在从事一个项目,该项目要求我在 Scientific Linux 6.4(Linux 内核 2.6.32)上运行触摸屏。虽然内核不完全支持触摸屏,但当我触摸屏幕时,我能够看到在触摸屏的 /dev/input/eventX 位置生成多点触摸事件。

我正在尝试编写一个简单的 C++ 程序来从 /dev/input/eventX 文件中读取数据并解析它,以便我可以手动处理多点触控事件,因为似乎是我使它正常工作的唯一方法。

所以我写了下面的程序:

std::ifstream input("/dev/input/event10");
if(input.is_open()) {
    while(input.good()) {
        int header;
        input >> header;

        cout << std::hex << header << " ";

        int data[16] = {};
        for(int i = 0; i < 16; i++) {
            input >> data[i];
            cout << std::hex << data[i] << " ";
        }

        cout << endl;
    }

    input.close();
} else cout << "Unable to open event handler for input polling..." << endl;

现在,我不完全知道我读取和解析输入的方法本身是否正确,但是当我在 bash 中使用以下命令时:

sudo cat /dev/input/event10 | hexdump -C

我以多行的形式获取输入数据,这些行以 8 位十六进制值开头,后跟 16 个 2 位十六进制值(字节)。

但我遇到的问题是,我总是收到消息“无法打开输入轮询的事件处理程序...”,提示打开文件时出现问题。起初,我想可能是因为在生成事件之前该文件中没有任何内容,所以它可能无法作为 ifstream 打开。我还尝试以 sudo 运行该程序,以防出现权限问题并收到相同的消息,因此我认为这与我打开文件的方式有关。

有谁知道打开和读取这些文件的正确方法吗?

编辑: 我的问题是关于为什么文件无法打开,不一定只是如何解析数据。建议的“重复”问题在这方面没有提供任何有用的信息。

最佳答案

没关系...我的文件名中有一个尾随空格(检测到而不是硬编码)。我添加了一个修剪功能,现在它打开得很好。

关于c++ - 如何从 Linux/dev/input/eventX 轮询输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56345463/

相关文章:

c++ - 包括 MS C 运行时发行版的替代方案?

c++ - iso c++ 禁止声明没有类型的泛型

c++ - 当 C++14 已经有泛型 lambda 时,在 C++20 中引入模板 lambda 的需要是什么?

python - platform.system 和 platform.linux_distribution 究竟输出什么?

linux - = 1502453670转为数字(bash)

c++ - 如何使用 C++ 或调用 winapi 查找字符是否属于特定代码页

linux - 将 JBOSS 6.2 升级到 JBOSS 7.0.8

linux - 如何在 osx El Capitan 中的多个文件中 grep 和替换字符串

c++ - 如何仅在 C 中将 SIGINT 发送到后台进程

c++ - 跨命名空间的 typedef 解析