JNI标准输出不会打印到控制台

时间:2015-05-06 06:20:30

标签: java c java-native-interface stdout

我使用JNI因为我需要一些c库。 我的问题是并非所有都打印到标准输出。 我知道我可以做到

puts("test");
fflush(stdout);
我自己。但我的问题是c库有一个调试功能,它打印到stdout,因此在控制台中不可见。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

您无法写入stdout,因为JNI从Java代码中运行本机代码,并且未附加到stdout。 您可以使用以下函数直接写入控制台设备。

void console_printf(const char *fmt,...)
{
    int fd = open("/dev/console", O_WRONLY);
    char buffer[1000];
    if (fd < 0)
        return;

    va_list ap;
    va_start(ap, fmt);
    vsprintf(buffer, fmt, ap);
    va_end(ap);

    write(fd, buffer, strlen(buffer));
    close(fd);
}