シリアルポートにいくつかのバイトを書き込むアプリケーションがあります。私がする時 cat /dev/ttyS0
何が転送されているかを確認するには、cat
コマンドによってデータが破損していることがわかりました。シリアルポートで何が送信されているかを確認する他の方法はありますか?
cat
がデータを変更する理由を誰かが知っていますか?
編集:反対側に別のアプリケーションがあり、その内容を確認するためにデータを傍受したいのですが、アプリケーションは引き続き機能する必要があります。
破損していません。何が起こっているのかというと、cat
コマンドがバイトの一部を取得していて、アプリケーションがそれらの一部を取得しているということです。したがって、cat
を実行すると、それによって読み取られたバイトはアプリによって失われ、cat
とアプリの両方に、破損しているように見える(異なる)部分ストリームが表示されます。
お使いの端末(または猫が表示している場所)によってデータが破損していないことを確認しますか? cat
がデータを破壊する可能性はほとんどありません。
od
(8進数のダンプ)を使用してシリアルポートからのデータをダンプしてみてください。そうすれば、(印刷可能であることに依存することなく)何が起こっているのかを正確に確認できます。使用する od -c
ASCIIデータを期待している場合。
それでも破損が見られる場合は、シリアルポートが正しく構成されていない可能性がありますか? setserial
とstty
を試して、より適切に構成できるかどうかを確認してください。
cat
はデータを変更しません。 Linuxではなくnullバイトを含む行を切り捨てる古いUnixシステムがあるかもしれませんし、最近のunixライクなシステムはないと思います。
一方、バイナリデータを端末に直接表示しようとすると、端末は制御文字を表示を制御するコマンドとして解釈します。それが制御文字の目的です。生データの印刷可能な表現を見たい場合は、いくつかの解決策があります。
cat -A
を実行します。これにより、制御文字の読み取り可能であいまいな表現が出力されます(たとえば、^A
はバイト0x01または2バイトシーケンス0x5e0x41である可能性があります)。hexdump -C
、od -t x1
またはその他の16進ダンププログラム(または必要に応じて8進ダンプ)を実行します。less /dev/ttyS0
を実行し、F
を押してデータを読み取り、Ctrl+C
を押してデータを参照します。 lessの中には、-r
と入力して、制御文字の生の表示と印刷可能な表現を切り替えます。/dev/ttyS0
を読み取ると、シリアルポートを介して送信されるものではなく、シリアルポートが受信するものが表示されることに注意してください。それが必要な場合は、作成しているアプリケーションをスパイします。 strace
またはデバッガーを使用します。