4

標準出力に出力する JNI 経由で C ライブラリを呼び出しています。この出力を System.out にリダイレクトするにはどうすればよいですか?

4

2 に答える 2

8

System.out です stdout。あなたが抱えているもっと根本的な問題はありますか (おそらく出力が混同されていますか?)。

別のメンバーも最後の点について言及しているので、さらに説明する必要があります。

System.outstdoutどちらもファイル記述子 #1 に対応します。

ただし、Java OutputStream(および派生クラス) と C のstdioライブラリの両方に、独自の (独立した) バッファリング メカニズムがあり、基礎となるwriteシステム コールへの呼び出しの数を減らすことができます。電話をかけたからとprintfいって、出力がすぐに表示されるとは限りません。

これらのバッファリング方法は独立しているため、Java コード内からの出力は (理論的には) 混同されるか、C コードからの出力と比較して順不同に見える可能性があります。

それが懸念される場合はSystem.out.flush()、JNI 関数を呼び出す前に呼び出すように手配し、C 関数 (stdio低レベルの呼び出しではなく使用している場合) で、戻る前にwrite呼び出す必要があります。fflush(stdout)

于 2008-11-14T17:12:26.697 に答える
1

Alnitak が書いたように、標準出力に出力する必要があります。メッセージが画面に表示されるまでに時間がかかる場合があることに注意してください。タイミングが重要な場合は、stdout に出力するときにメッセージと共にタイムスタンプを出力する必要があります。

于 2008-11-14T21:46:12.730 に答える