我通过JNI调用一个C库,打印到stdout.如何将此输出重定向到System.out?
System.out
是 stdout
.你有一些更基本的问题(混合输出,也许?).
由于另一位成员也提到了最后一点 - 我应该进一步解释:
System.out
并且stdout
都对应于文件描述符#1.
但是,Java OutputStream
(和派生类)和C stdio
库都有自己的(独立)缓冲机制,以减少对底层write
系统调用的调用次数.只是因为你打过电话printf
或类似电话,我们无法确保您的输出能够直接显示.
因为这些缓冲方法是独立的,所以Java代码内的输出可能(理论上)相对于C代码的输出混合或以其他方式出现无序.
如果这是一个问题,你应该安排System.out.flush()
在调用你的JNI函数之前调用,并且在你的C函数中(如果它是使用stdio
而不是低级write
调用)你应该fflush(stdout)
在返回之前调用.