
だから、/dev/ttyUSB0
次od
のコマンドを使用しました。
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
私がここで何を見逃しているのか知っている人はいますか?
答え1
おそらくtty
デバイスは標準モード(ttyラインルールが単純なラインエディタを実装するモード)にあるため、eof
もう一方の端で受信した文字のため(デフォルトでは^D
read()
)何も返されません。
走る時も同様
od -vx --endian=big
端末に入力してくださいCtrl-D。
別の説明は、標準モードがオフになっているがVMIN
termios設定が0に設定されていることです。 VMIN = 0の場合、read()
デバイスファイルのaはすぐに読み取る準備ができたエントリを返し、それ以外の場合は何も返しません(最終ファイルを意味します)(VTIME> 0以外の場合はVTIMEを待つ)1秒あたり少なくとも1バイト)。
今回も端末で試してみることができます。
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)