Tty

cat 損壞串口數據

  • September 23, 2012

我有一個將一些字節寫入串列埠的應用程序。當我cat /dev/ttyS0查看正在傳輸的內容時,我發現數據已被cat命令損壞。還有其他方法可以查看串列埠上發送的內容嗎?

有誰知道為什麼要cat更改數據?

編輯:另一邊還有另一個應用程序,我想攔截數據以檢查其內容,但應用程序必須繼續工作。

您確定數據沒有被您的終端(或 cat 顯示的任何地方)損壞嗎? cat不太可能損壞您的數據。

嘗試使用od(八進制轉儲)轉儲來自串列埠的數據,這樣您就可以準確地看到正在發生的事情(而不依賴於它是可列印的)。od -c如果您需要 ASCII 數據,請使用。

如果您仍然看到損壞,也許您的串列埠配置不正確?嘗試看看他們是否可以更好地配置東西setserialstty

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調試器或調試器。

引用自:https://unix.stackexchange.com/questions/48886