私は現在Linuxファイル記述子を使用してシリアルポートを介して外部デバイスと通信しており、返された結果をデバイスに複製できるかどうか疑問に思います。
具体的には、ファイル記述子5を使用してRaspbianデバイスのシリアルポート/ dev / ttyACM0を読み書きします。
exec 5<>"/dev/ttyACM0"
内部的には、応答が入るたびにポートからデータを継続的に読み取り、次のステップを決定する機能を実行します。
function __processing__(){
local line
while read line<&5; do
... some processing ...
... echo $line > "log.txt"
done
}
シリアルポートに単一のコマンドを送信し、バックグラウンド機能が応答を処理できるようにすると、正常に動作します。フォアグラウンドでXMODEMプロトコルを使用してデータを転送するために別のソフトウェアを使用し始めたときに問題が発生しました。
sx -vv -k "./firmware_update.bin" >&5 <&5
ACK応答はログファイルに書き込まれますが、プロセスは常にACKでタイムアウトします。だから私はバックグラウンドプロセスがFD5を読み、sx
何も残さないからだと思います。その後、バックグラウンドプロセスを削除してコマンドを実行し、sx
すべてのパケットを正常に送信したときに疑問が確認されました。
ただし、実際に次に何をすべきかを知るために、シリアルポートに記録された応答はありません。
だから私の質問は:妨害せずに応答を読み続けることができるようにバックグラウンド機能をオーバーライドする方法はありますかsx
?tee
コマンドを使用してstdoutからデータをコピーできることを知っています。 FD5を使って同様の効果を得ることはできますか?
P / s:Linuxでファイルディスクリプタとパイプを使用するのは今回が初めてなので、出力リダイレクトの多くの技術がわかりません。みんなありがとうございます。