Linuxでパイプやnetcatなどのシリアルポートを使用するには?

Linuxでパイプやnetcatなどのシリアルポートを使用するには?

2つのシリアルポート(ttyS0とttyUSB0)を持つ2台のコンピュータがあります。 (実際には同じコンピュータにありますが、これはテスト用です)。このポートはヌルモデムケーブルで接続されています。私は単にバイトを一方の端に送信し、もう一方の端に送信するか、その逆に送信できるようにしたいと思います。次はなぜ機能しないのですか? :

# set both serial ports to 9600 8n1
# `-parenb` means no parity,
# `-cstopb` means 1 stop bit
# cs8 means 8 bits at a time 
stty -F /dev/ttyUSB0 cs8 -cstopb -parenb 9600
stty -F /dev/ttyS0 cs8 -cstopb -parenb 9600

# in one terminal:
echo "asdf" > /dev/ttyUSB0

# in another terminal, this hangs and does nothing
cat < /dev/ttyS0

andpipe netcat(下)と同様の作業を簡単に行うことができるので、上記のような作業も可能になりそうです。

mkfifo mypipe

# in one terminal
cat < mypipe

# in another. works as expected
echo "asdf" > mypipe

ベストアンサー1

次はなぜ機能しないのですか?

# in one terminal:
echo "asdf" > /dev/ttyUSB0

# in another terminal, this hangs and does nothing
cat < /dev/ttyS0

通常、シリアルポートはデータをバッファリングしないためです。クライアントアプリケーションがシリアルポートに到着するバイトを受信しない場合、そのバイトは単に破棄されます。

実験的に、受信コンピュータで別のシリアル端末プログラムを起動し、転送コンピュータでminicomコマンドを再実行してみます。転送速度とフレームが一定であると仮定すると、ターゲットに「asdf」が表示されることがわかります。cuecho

おすすめ記事