プログラムを実行するためのユーティリティを作成しています。プログラムからバッファリングされていない stdout と stderr をキャプチャする必要があります。する必要がある:
- stdout と stderr を別々のファイルにキャプチャします。
- 出力をバッファリングしない (または行バッファリングする) 必要はありません。
- 実行中のプログラムのソースを変更せずに。
問題は、出力をファイルにパイプするときに、stdout ストリームがライン バッファーではなくブロック バッファーになることです。プログラムがクラッシュした場合、出力はフラッシュされず、空白になります。したがって、バッファリングなしで (または行バッファリングを使用して) stdout をキャプチャする必要があります。
これは pty で実行できると思いますが、私が望むことを正確に実行する例を見つけるのに苦労しています (ほとんどは stderr を無視します)。実際、C で pty の例をまったく見つけたことがあるかどうかはわかりません。ほとんどは、Python の pty および subprocess モジュールのような高レベルのインターフェースを使用します。
誰でも(コードスニペットまたはリンクで)助けてもらえますか? どんな助けでも大歓迎です。
編集:私はそれを解決したと思います。次の 2 つのリンクは非常に役に立ちました。
- http://publib.boulder.ibm.com/infocenter/zos/v1r10/index.jsp?topic=/com.ibm.zos.r10.bpxbd00/posixopenpt.htm
- http://www.gidforums.com/t-3369.html
私のコードはリポジトリとして利用できます: