如何使用JNI将终端输出从C程序重定向到System.out?

4 c java java-native-interface stdout

我通过JNI调用一个C库,打印到stdout.如何将此输出重定向到System.out?

Aln*_*tak 8

System.out stdout.你有一些更基本的问题(混合输出,也许?).

由于另一位成员也提到了最后一点 - 我应该进一步解释:

System.out并且stdout都对应于文件描述符#1.

但是,Java OutputStream(和派生类)和C stdio库都有自己的(独立)缓冲机制,以减少对底层write系统调用的调用次数.只是因为你打过电话printf或类似电话,我们无法确保您的输出能够直接显示.

因为这些缓冲方法是独立的,所以Java代码内的输出可能(理论上)相对于C代码的输出混合或以其他方式出现无序.

如果这是一个问题,你应该安排System.out.flush()在调用你的JNI函数之前调用,并且在你的C函数中(如果它是使用stdio而不是低级write调用)你应该fflush(stdout)在返回之前调用.