cat 损坏串口数据

Ric*_*rez 4 tty serial-port cat

我有一个将一些字节写入串行端口的应用程序。当我cat /dev/ttyS0查看正在传输的内容时,我发现数据已被cat命令损坏。有没有其他方法可以查看串行端口上发送的内容?

有谁知道为什么要cat更改数据?

编辑:另一边有另一个应用程序,我想拦截数据以检查其内容,但该应用程序必须继续工作。

P.T*_*.T. 9

您确定数据没有被您的终端(或 cat 显示的任何地方)损坏吗? cat不太可能损坏您的数据。

尝试使用od(octal dump) 转储来自串行端口的数据,这样您就可以准确地看到所遇到的内容(而不依赖于它的可打印性)。od -c如果您需要 ASCII 数据,请使用。

如果您仍然看到损坏,也许您的串行端口配置不正确?尝试setserialstty看看他们是否能更好地配置的东西。


Gil*_*il' 6

cat不修改数据。可能有旧的 Unix 系统会截断包含空字节的行,但不是 Linux,我认为没有任何现代类 Unix 系统。

另一方面,如果您尝试直接在终端上显示二进制数据,终端会将控制字符解释为控制显示的命令。这就是控制字符的用途。如果您想查看原始数据的可打印表示,您有几种解决方案:

  • Run cat -A,它将打印可读但不明确的控制字符表示(例如^A可能是字节 0x01 或两字节序列 0x5e 0x41)。
  • 运行hexdump -Cod -t x1或其他一些十六进制转储程序(或八进制转储,如果您愿意)。
  • 运行less /dev/ttyS0并按下F读取一些数据然后Ctrl+C浏览它。在 less 中,键入-r以在控制字符的原始显示和可打印表示之间切换。

请注意,读取/dev/ttyS0显示的是您的串行端口接收的内容,而不是通过它发送的内容。如果需要,请监视正在编写的应用程序,例如使用strace或调试器。


Jim*_*ris 5

它没有损坏。发生的事情是cat命令正在获取一些字节,而您的应用程序正在获取其中一些字节。因此,当您运行 时catcat应用程序会错过它读取的任何字节,并且应用程序和应用程序都将看到(不同的)部分流似乎已损坏。