簡體   English   中英

如何使用JNI將終端輸出從C程序重定向到System.out?

[英]How do I redirect terminal output from a C program to System.out with JNI?

我通過JNI調用一個C庫,打印到stdout。 如何將此輸出重定向到System.out?

System.out stdout 你有一些更基本的問題(混合輸出,也許?)。

由於另一位成員也提到了最后一點 - 我應該進一步解釋:

System.outstdout都對應於文件描述符#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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM