如何从Linux / dev / input / eventX

时间:2019-05-28 15:24:27

标签: 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 的身份运行该程序,以防万一这是权限问题并收到相同的消息,因此我认为它与我打开文件的方式有关。

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

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

1 个答案:

答案 0 :(得分:0)

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