java - 从 Java JNI 捕获 C stderr

标签 java c java-native-interface stderr

我有一个用 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/

相关文章:

c - 当我注释 malloc() 调用时,为什么会出现段错误(核心转储)?

c - 如何在 IAR 链接描述文件中定义总图像大小或其结束地址的符号?

java - 对应 'C'调用System.loadlibrary

Java 回调到 C++ 从 C++ 回调

java - J++ 到 Java : how to migrate from RNI to JNI?

java - 尝试多线程 URL 连接以减少加载时间

java - Java中如何通知特定线程

java - 如何在 hdfs 上使用 java 压缩文件

java - 十六进制颜色到 HSV 转换 Java

c - 错误: derefrencing pointer to incomplete type