[英]How do I redirect terminal output from a C program to System.out with JNI?
我通過JNI調用一個C庫,打印到stdout。 如何將此輸出重定向到System.out?
System.out
是 stdout
。 你有一些更基本的問題(混合輸出,也許?)。
由於另一位成員也提到了最后一點 - 我應該進一步解釋:
System.out
和stdout
都對應於文件描述符#1。
但是,Java的OutputStream
(和派生類)和C的stdio
庫都有自己的(獨立的)緩沖機制,以減少對底層write
系統調用的調用次數。 僅僅因為你已經調用了printf
或類似產品,並不能保證你的輸出會直接出現。
因為這些緩沖方法是獨立的,所以Java代碼內的輸出可能(理論上)相對於C代碼的輸出混合或以其他方式出現無序。
如果這是一個問題,你應該安排在調用你的JNI函數之前調用System.out.flush()
,並且在你的C函數中(如果它使用stdio
而不是低級write
調用)你應該在之前調用fflush(stdout)
返回。
正如Alnitak所寫,你應該打印到stdout。 您應該注意,消息可能需要一段時間才會顯示在屏幕上。 如果時間很重要,您應該在打印到stdout時打印帶有消息的時間戳。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.