从Java JNI捕获C stderr

jos*_*pos 5 c java java-native-interface stderr

我有一个用C开发的大程序,大多数函数有几 fprintf(stderr, "message")行.

但是现在我需要在Java程序中使用这些函数.所以,我实现了一个JNI接口,用于在Java和C之间进行通信.一切正常,Java和C可以进行通信,但现在我想在Java中捕获几个C的stderr ...我该怎么做?

干杯;)

SJu*_*n76 0

当您调用 JNI 库时,您会将其加载到 JVM 进程中,因此库 STDOUT 和 STDERR 将是 JVM STDOUT 和 STDERR。所以问题是特定于操作系统的,更像是“进程如何读取自己的 STDOUT/STDERR?”

有几种可能性内部捕获/重定向标准输出?,但我认为并不容易的是仅读取库的 STDOUT 或 STDERR (我认为通过我给您提供的示例,一旦执行重定向,您就无法返回使用控制台进行输出(*))。

正如所评论的,答案将在很大程度上取决于您的操作系统。

(*)我可能是错的,我对C/系统编程不太精通。