我有以下场景:
我的虚拟机中有一个 Windows,它有一个连接到主机管道(命名管道/fifo)的公开串行端口。
主管道位于/tmp/win-serial-com3
。
在我的主机操作系统上,我正在使用socat
像这样:
socat - /tmp/win-serial-com3,cr
来宾,我开油灰,并设置“在每个CR中隐式LF”,并启用本地回显。 PuTTY 在该来宾 Windows 上打开 COM3。
两者都运行时,返回键工作正常,没有重复等。我可以在 PuTTY 中键入,我可以看到每个字符一个接一个地出现在正在socat
运行的主机操作系统的终端中。
但是,当我在主机操作系统中输入某些内容时,我可以看到本地回显(因为它没有通过echo=0
选项关闭),但只有在按回车键后,该字符才会出现在我的来宾操作系统上的 PuTTY 中。
我希望发生的是,每次按下某个键时,该键都会发送到命名管道,本质上与来宾操作系统上的 PuTTY 具有相同的行为。
我认为这与 STDIO ( ) 的缓冲有关-
,但我不太确定。
答案1
好的,我找到了解决方案,并且经过了相当多的尝试和错误:
在主机端(Linux),socat
调用方式如下:
stty -icanon && socat - /tmp/win-serial-com3,cr
在来宾端,必须使用“每个 CR 中的隐式 LF”来调用 PuTTY,并在“终端”设置中取消设置“每个 LF 中的隐式 CR”。
这仍然不理想。
当我按backspace主机端时,它会打印一个^?
,而不是删除前一个字符。在访客方面,这工作正常。当按下backspace来宾端时,它会删除来宾端的字符,但不会删除主机端的字符。我还没有找到工作的方法backspace。