![为什么从两个连接的 pty 读取会导致无限循环?](https://linux22.com/image/42815/%E4%B8%BA%E4%BB%80%E4%B9%88%E4%BB%8E%E4%B8%A4%E4%B8%AA%E8%BF%9E%E6%8E%A5%E7%9A%84%20pty%20%E8%AF%BB%E5%8F%96%E4%BC%9A%E5%AF%BC%E8%87%B4%E6%97%A0%E9%99%90%E5%BE%AA%E7%8E%AF%EF%BC%9F.png)
我想伪造一个 gsm 调制解调器来测试程序。我希望程序向我发送 AT 代码,并且我可以回复它,有点像虚拟串口。但由于某种原因,从程序写入的数据被直接写回其中。
我本以为 socat 创建了两个管道;一个将测试程序的输出发送到我在另一侧连接的任何东西,另一个管道在另一个方向工作。但如果你明白我的意思的话,数据似乎是“在一根管道中循环”。这是一张来自TTY 揭秘来说明我的观点:
简化的复制脚本:
我使用以下命令创建 pty:
(xterm 1)$ socat -d -d -d PTY,link=foo PTY,link=bar
2012/01/18 14:45:01 starting loop with FDs [3,3] and [5,5]
我听双方的意见:
(xterm 2)$ cat <bar
(xterm 3)$ cat <foo
如果我写几个字...
(xterm 4)$ echo "..." > foo
..socat 记录一个很多无限地往返的交通。
(xterm 1)
2012/01/18 14:25:58 socat[7667] I transferred 4095 bytes from 5 to 3
2012/01/18 14:25:58 socat[7667] I transferred 4095 bytes from 3 to 5
2012/01/18 14:25:58 socat[7667] I transferred 4095 bytes from 5 to 3
2012/01/18 14:25:58 socat[7667] I transferred 4095 bytes from 3 to 5
2012/01/18 14:25:58 socat[7667] I transferred 4095 bytes from 5 to 3
2012/01/18 14:25:58 socat[7667] I transferred 4095 bytes from 5 to 3
这两个 cat 命令都没有输出任何内容。
编辑:@wnoise 解释说 socat 创建了两个 PTY 主控。这是一张图片来说明这一点:
答案1
您使用的语法创建两个 pty master 并将它们双向连接在一起。因为您没有echo=0
在选项中添加“”,所以您不断收到回声。可能还需要raw
根据您的用例添加。