cat 损坏串行端口数据

cat 损坏串行端口数据

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

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

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

答案1

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

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

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

答案2

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调试器。

答案3

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

相关内容