4

我正在通过打印到标准输出的 JNI 调用 C 库。如何将此输出重定向到 System.out?

4

2 回答 2

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)在返回之前调用。

于 2008-11-14T17:12:26.697 回答
1

正如 Alnitak 所写,您应该打印到标准输出。您应该注意,消息可能需要一段时间才能出现在屏幕上。如果时间很重要,您应该在打印到标准输出时打印带有消息的时间戳。

于 2008-11-14T21:46:12.730 回答