socat -v 等待接收到 1024 字节,我需要无缓冲显示

问题描述 投票:0回答:1

我正在寻找一个命令来监视串行终端端口,以十六进制转储未缓冲的数据。数据不是面向行的。

我尝试过:

socat -b 1 -v -x /dev/ttymxc2,cfmakeraw - | cat >/dev/null

我希望立即显示收到的每个字节:

2024/01/06 07:14:46.000313646  length=1 from=2048 to=2048 ff                                               . --

相反,我必须等待 1024 个字节才能看到串行端口的任何输出。 所以选择

-b 1

后记:

基于 dest-unreach 答案,我决定看看 strace。 Linux TTY 驱动程序似乎将数据保存在 1K 块中。因此选项

cfmakeraw
不允许 TTY 驱动程序一次将 1 个字节的数据传递给 socat。 所以我试图解决的问题仍然存在,因为我需要一种方法来告诉 tty 驱动程序允许数据立即传递到 socat 的 pselect。

这是 strace 输出,它显示 socat 在等待 1K 块到达后逐字节读取数据,如 dest-unreach 的答案所示:

823   10:02:23 pselect6(6, [0 5], [], [], NULL, NULL) = 1 (in [5])                                                                                    
823   10:02:58 recv(3, 0x7e983520, 503, MSG_DONTWAIT) = -1 EAGAIN (Resource temporarily unavailable)                                                  
823   10:02:58 recv(3, 0x7e982fe0, 503, MSG_DONTWAIT) = -1 EAGAIN (Resource temporarily unavailable)                                                  
823   10:02:58 read(5, "\377", 1)       = 1                       

后记2:

我尝试从 PC 到设备的串行端口(以 300 波特率)输入 tty。 如果我打字速度很慢,socat 会在我打字时打印数据。 如果我打字速度非常快,设备的显示屏上会出现明显的暂停,直到我在打印输出之前停止打字。也许无法持续追踪数据?

serial-port buffer tty socat
1个回答
0
投票

Socat 会立即传输数据,甚至是单个字节,甚至无需使用 -b 减小传输缓冲区大小。您可以使用选项 -d -d -d -d 观看此内容,它将显示 select(2) 调用及其返回。

我认为你的tty监视器没问题,它说你应该检查tty另一端的数据源!

© www.soinside.com 2019 - 2024. All rights reserved.