標準出力に出力する JNI 経由で C ライブラリを呼び出しています。この出力を System.out にリダイレクトするにはどうすればよいですか?
2 に答える
System.out
です stdout
。あなたが抱えているもっと根本的な問題はありますか (おそらく出力が混同されていますか?)。
別のメンバーも最後の点について言及しているので、さらに説明する必要があります。
System.out
stdout
どちらもファイル記述子 #1 に対応します。
ただし、Java OutputStream
(および派生クラス) と C のstdio
ライブラリの両方に、独自の (独立した) バッファリング メカニズムがあり、基礎となるwrite
システム コールへの呼び出しの数を減らすことができます。電話をかけたからとprintf
いって、出力がすぐに表示されるとは限りません。
これらのバッファリング方法は独立しているため、Java コード内からの出力は (理論的には) 混同されるか、C コードからの出力と比較して順不同に見える可能性があります。
それが懸念される場合はSystem.out.flush()
、JNI 関数を呼び出す前に呼び出すように手配し、C 関数 (stdio
低レベルの呼び出しではなく使用している場合) で、戻る前にwrite
呼び出す必要があります。fflush(stdout)
Alnitak が書いたように、標準出力に出力する必要があります。メッセージが画面に表示されるまでに時間がかかる場合があることに注意してください。タイミングが重要な場合は、stdout に出力するときにメッセージと共にタイムスタンプを出力する必要があります。