2017-12-20 8 views
-1

Linux上でminicomを使用してPDP-11と通信していて、私はhereというシェルスクリプトを使ってバイナリをダウンロードしています。私が見ているのは、 'pv'で示されているプログレスバーです。シリアルラインが走っている9600 bpsではなく、ダウンロードがほぼ即時に行われていることを示しています(USBシリアルドングルではなく、Linux側のシリアルポートです) 。minicomでバイナリダウンロードが切り詰められる

これは機能しますが、ダウンロードが大きくなると、最後が切り捨てられます。もし私がスクリプトの終わりにsleep()時間を増やせば、私はそれを再び働かせることができます。

出力はカーネルでバッファされているように見え、スクリプト(pvプログラムではない、奇妙なことに)がすぐに終了してからバッファがフラッシュされると私には見えます。

私はシェルスクリプトとpvの代わりに自分の小さなCプログラムを書こうとしましたが、setvbuf()を使って_IONBFを設定することでこれを解決できると考えました。同じ結果。

私はどのように私はこのバッファリングを得ることができるかについてのアイデアは、pvまたは自分のプログラムを書いて?ありがとう。

答えて

0

minicomのソースを調べると、サブプログラムが戻るときにバッファをフラッシュして、プログラムの待機が必要であることがわかります。

バッファリングをオフにする方法はありませんでしたが、終了する前にデータが送信されるまでプログラムが待つtcdrain()関数が見つかりました。

関連する問題