Ubuntuでod
を使用して、/dev/ttyUSB0
からの出力を読み取ろうとしています。だから私はこのコマンドを使用しました:
od -x --endian=big < /dev/ttyUSB0
私が昨日それを使用したとき、それはブロックされておらず、このように逃げたり戻ったりせずに物を見せただけでした:
0000000 55aa 03ff 0104 0616 835a a555 aaff 0302
0000020 1104 e0e1 025a a555 aa03 ff01 0506 8682 ...
しかし、今日使用すると、od
は停止し、印刷直後に戻ります。
0000000
誰かが私がここで欠けているものを知っていますか?
おそらく、tty
デバイスは正規モード(ttyラインディシプリンが単純なラインエディターを実装するモード)であるため、もう一方の端からeof
文字(デフォルトでは_^D
_)を受信します。 read()
は何も返しません。
それはあなたが走るときと同じでしょう
_od -vx --endian=big
_
ターミナルでタイプします Ctrl-D。
もう1つの説明は、正規モードはオフですが、VMIN
termios設定が0に設定されていることです。VMIN= 0の場合、デバイスファイルのread()
は、準備ができているものをすべて返します。すぐに読み取られ、それ以外は何も読み取られません(ファイルの終わりを意味します)(VTIME> 0の場合を除きます。この場合、少なくとも1バイトはVTIMEデシ秒まで待機します)。
繰り返しになりますが、次の端末で試すことができます。
_s=$(stty -g); stty -icanon min 0 time 0; od -vx --endian=big; stty "$s"
_
次のコマンドで現在の設定を確認します。
_stty -a < /dev/ttyUSB0
_
その_/dev/ttyUSB0
_が、データの転送にのみ使用され、端末としては使用されないシリアルデバイスである場合は、
_stty raw -echo < /dev/ttyUSB0
_
事実上、それはそれに対するttyライン規律の効果のほとんどを無効にします。
各擬似端末(PTY)コンポーネント(ソフトウェア、マスター側、スレーブ側)の責任は何ですか? およびtermios(3)
およびstty(1)
のマニュアルページを参照してください。詳細については。