![](/img/trans.png)
[英]How do I redirect terminal output from a C program to System.out with JNI?
[英]How do I pass System.out from Java to C using JNI?
我有使用JNI運行Java程序的C ++ dll,我試圖弄清楚如何捕獲該Java程序的輸出。 我已經嘗試過使用stringstream將stdout重定向到緩沖區,但這似乎只能抓住來自我dll的輸出。 我該怎么做才能讀入System.out?
這是我現在正在嘗試的方法,它不起作用:
using namespace std;
stringstream buffer;
streambuf * old = cout.rdbuf(buffer.rdbuf());
//run java stuff here
完成此操作后,即使java方法正確執行並且這些方法中有System.out.println()調用, buffer.str()
仍然為空。 如果我做類似cout << "test" << endl;
事情cout << "test" << endl;
,buffer.str()獲取該文本,因此緩沖區似乎沒有問題。 我在這里有什么選擇?
通過修改cout
緩沖區,您不需要修改標准輸出流,而只需修改用於封裝它的對象。
要完全重定向輸出,你必須freopen
stdout
到一個文件或管道,你可以在此了解更多信息的問題 。
然后,要獲取Java代碼的完整輸出,可以在讀取模式下打開相同的文件(或管道),只需獲取所需的信息即可。
順便說一句,在您的代碼示例中,您不需要stringstream
而只需要關聯的stringbuf
否?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.