11

こんにちは、この投稿によると、疑似端末 (pty) を介してコマンドにunbuffer接続します。これにより、システムは対話型プロセスとして扱われるため、stdout バッファリングは使用されません。

この機能を Windows で使用したいと考えています。unbufferWindows の program に相当するものを教えてください。ありがとう。

4

3 に答える 3

5

あなたが説明している動作は、I/O にランタイム ライブラリを使用するアプリケーションの典型です。デフォルトでは、ほとんどのランタイム ライブラリは、ハンドルがコンソールなどのキャラクタ モード デバイスであるかどうかを確認し、そうである場合はバッファリングを行いません。(ランタイム ライブラリがパイプをコンソールと同じように扱うのが理想的ですが、ほとんどはそうではないようです。)

実際にパイプに書き込んでいるときに、そのようなアプリケーションをだましてコンソールに書き込んでいると思わせる賢明な方法を私は知りません。

補遺: 7 年後、Windowsはついに疑似コンソールをサポートしました。Windows 10 v1809 以降で実行している場合、この新しい API が問題を解決するはずです。

以前のバージョンの Windows では、予想されるデータ量がわかっている場合、原則として、コンソール API 関数を使用して、アプリケーションが書き込むコンソールを作成し、コンソールから出力を読み取ることができました。しかし、Java からそれを行うことはできません。それを行うには C アプリケーションを作成する必要があります。

同様に、原則として、Unix 疑似端末 (パイプのように動作するが、それ自体は文字モード デバイスであると報告するもの) と同等のデバイス ドライバーを作成することはおそらく可能であるはずです。ただし、デバイス ドライバーの作成には特定の専門知識が必要であり、デジタル署名する必要があるため、既存の製品が存在しない限り、このアプローチは実行できない可能性があります。

于 2012-07-18T19:41:40.290 に答える