我目前有一个USB卡刷卡连接到嵌入式linux机器,从我可以告诉我和我所研究的它充当键盘,并输入所有数据,就像我在打字。现在我有一个perl脚本,它接收所有这些数据并将其保存到文件中。唯一的问题是,它只知道在perl脚本在前台运行时获取数据,否则“键盘”输入到哪里。
我的问题是,每次读取输入时,如何使用此卡刷卡运行脚本?或者我可以通过在后台运行的应用程序以某种方式捕获数据。 I.E.在c ++程序中,在后台运行,是否会读取机器的任何输入?
我从来没有使用刷卡读卡器,所以我不能100%确定它们是如何工作的。
对此有任何建议将不胜感激!
答案 0 :(得分:5)
我几乎已经完成了这个(除了带有键盘的USB条形码阅读器)。
我的系统具有自定义USB热插拔规则,可根据其供应商和产品ID在插入USB设备时对其进行检测。此规则会在event
中为相应的/dev/input/
设备创建符号链接。
然后我有一个始终运行的C守护进程。它会监视/dev/input/
目录,当它看到符号链接时,会打开event
设备。然后,它使用EVIOCGRAB
IOCTL来获取独占使用的事件设备(这可以防止数据在其他应用程序中显示为键盘输入),并读取与按键相对应的输入事件。守护进程将按键转换为字符并将其存储在数据库中。
答案 1 :(得分:1)
我有一个想法,但它很一般。
您是否可以不断监视另一个程序中的数据,缓冲它,然后在缓冲区达到一定大小或在没有活动的情况下持续一段时间时将结果通过管道传输到perl脚本中?如果你输入它,你不必修改你的perl脚本,因为它仍然在STDIN上。
所以,就像这样:
监控程序 - >收集数据 - >将其输入您的Perl程序
我希望这个想法很有用。
-Brian J. Stinar -
答案 2 :(得分:1)
cin将从连接的终端输入设备读取输入。在不了解您的软件设计的情况下,我的第一个预感是从Perl脚本中读取数据并不是设计的最佳选择。我可以使用您描述的Perl脚本在嵌入式Linux设备上读取IR遥控器,但通常我直接与我的主应用程序中的硬件或供应商提供的API接口。您的读卡器是否提供了API?
读卡器插入机器时的设备名称是什么(/ dev / *)?我打开它并以那种方式阅读。
答案 3 :(得分:1)
我从来没有在Linux中处理过这个问题。然而,这听起来与我在Windows中看到的非常相似。
根据我的经验,许多这些类型的设备被操作系统自动检测为键盘类型的设备。因此,来自阅读器的任何输入都被输入到真实键盘使用的相同键盘流中。当它到达任何实际运行的程序时,没有办法区分读卡器输入数据和用户输入真正非常快的用户之间的区别。
因此,您会得到原始问题中描述的行为:读卡器的输入仅在正常键盘输入的位置 - 进入焦点程序。
您最好的选择是调查制造商的网站(或以其他方式联系他们)并查明他们是否提供某种驱动程序,以允许程序完全独立于键盘流捕获该输入。
如果制造商没有提供这样的东西,也许某些第三方会这样做。但不幸的是,我从未调查过,所以我不知道在哪里告诉你甚至开始寻找。