当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何使用JNI将终端输出从C程序重定向到System.out?》经验,为你挑选了1个好方法。

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



1> Alnitak..:

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

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

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

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

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

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

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有