c++ - 如何从 Linux /dev/input/eventX 轮询输入
问题描述
我正在做一个项目,该项目需要我在 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运行程序,以防万一这是权限问题并收到相同的消息,所以我相信这与我打开文件的方式有关。
有谁知道打开和读取这些文件的正确方法?
编辑:我的问题是关于为什么文件无法打开,不一定只是如何解析数据。建议的“重复”问题在这方面没有提供任何有用的信息。
解决方案
没关系......我的文件名中有一个尾随空格(检测到而不是硬编码)。我添加了一个修剪功能,现在它打开得很好。
推荐阅读
- r - R - 根据另一列中的另一行向下填充一列的行
- python-3.x - RingCentral API CallLog 在不同时区给出响应
- php - 致命错误:未捕获的错误:第 23 行的 Class 'User' C:\xampp\htdocs\gallery\admin\includes\admin_content.php
- eclipse - IntelliJ 自定义数据视图等效于 Eclipse?
- clojure - 如何使用 clj 工具 AOT 编译单个 clojure 文件?(没有 deps.edn 文件)
- elasticsearch - 我可以从 Elasticsearch/X-pack 中的 Forecast API 检索数据吗
- ios - 当应用程序终止或未运行时,从iOS中的AppStore更新应用程序时是否有任何回调?
- azure-devops - VSTS - 通过 .NET 客户端库或 REST API 以编程方式检索链接到特定测试用例的错误工作项
- ruby-on-rails - 使用 POST 方法在 AMP 中自动完成
- excel - Excel:查找多个条件但同一列