我有一个用 C 开发的大程序,大多数函数都有几个
fprintf(stderr, "message")
行。
但现在我需要在 Java 程序中使用这些函数。所以,我实现了一个JNI接口(interface)来实现Java和C之间的通信。一切正常,Java和C可以通信,但是现在我想在Java中捕获C的几个stderr...我该怎么做?
干杯;)
最佳答案
根据我对同样问题的经验,我可以看出 JNI 桥对通过标准流从 JNI 输出的内容的重要性有非常奇怪的看法。通常它会进行大量缓存,以不可预测的 block 和时间溢出,我们没有弄清楚如何强制刷新。
我们最终用大量正则表达式替换了 *printf()
语句并记录到文件,完全在 C 端完成。拖尾生成的日志文件比任何试图说服 JVM 在 C 层这样说时(而不是在 JVM 考虑缓冲区时)确实需要日志记录的尝试更可靠。
关于java - 从 Java JNI 捕获 C stderr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13389716/