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

 2023-01-20    268  

问题描述

我正在通过JNI调用C库,该库将打印到Stdout.如何将此输出重定向到System.out?

推荐答案

System.out IS stdout.您还有一些您遇到的基本问题(也许混合了输出?).

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

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

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

但是,Java的OutputStream(和派生类)和C的stdio库都有其自己的(独立)缓冲机制,以减少对基础write系统调用的调用数量.仅仅因为您打电话给printf或类似,就不能保证您的输出会直接出现.

由于这些缓冲方法是独立的,因此(理论上)在Java代码中的输出可能会混合在一起,或者相对于C代码的输出而出现的阶段.

.

如果这是一个问题,则应在调用JNI函数之前和C函数(如果使用stdio而不是低级write呼叫)之前安排System.out.flush(),则应调用返回之前.

其他推荐答案

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

以上所述是小编给大家介绍的如何将终端输出从C程序重定向到System.out使用JNI?,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://77isp.com/post/26104.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。