我使用的收银机都是赤裸裸的 RedHat Linux 机器。这些寄存器有一个连接到串行端口 ( ttyS0
) 的扫描仪。
我们做了很多测试,需要有人站在收银台并在扫描仪上刷卡产品。我正在尝试找出一种方法将这个人从等式中删除。
有没有一种简单的方法来模拟串行端口的输入?
显然,向串行端口发送信息很容易:
echo [whatever] > /dev/ttyS0
但我真正喜欢的是某种 bash 代码,我可以在其中输入:
echo [barcode number] > (some code that makes the machine think the barcode number is coming from the serial port)
这可能吗?
我实际可以登记的内容也受到限制。我无法在计算机上安装任何新实用程序。我可以把bash
脚本放在那里,但仅此而已。
答案1
答案2
TIOCSTI
是可用的,但这并不是当今备受推崇的机制。另一种选择非常简单:这就是伪终端的作用。只需将扫描仪指向伪终端而不是真正的串行终端,然后从伪终端的主端驱动适当的输入即可。的确,expect
已经准备好通过伪终端驱动交互式终端 I/O 应用程序。
这完全取决于expect
Fedora 软件包中的 是否是安装所有内容的人选择已安装在您的计算机上的东西之一。当然,Perl 也是如此。我们回答者无法知道模糊的“裸露”实际上意味着什么。
答案3
最后我能够解决它。非常感谢你们。
创建一个空白文本文件
编辑文件并将此代码复制并粘贴到文本文件中
//**tiocsti.c**//
#include <unistd.h>`
#include <err.h>
int main(void)
{
char c; ssize_t r;
while((r = read(0, &c, 1)) > 0)
{
if(ioctl(1, TIOCSTI, &c))
{
err(1, "ioctl(TIOCSTI)");
}
}
if(r < 0)
err(1, "read");
return 0;
}
将文本文件另存为
tiocsti.c
在同一目录中,
cc tiocsti.c -o tiocsti
在终端上运行以编译您在第一步中创建的 tiocsti.c 文件
5.要生成 ttyS0 的假输入,只需运行
echo yadayada | ./tiocsti > /dev/ttyS0