usar nativos metodos java c jni stdout

java - nativos - ¿Cómo redirecciono la salida del terminal de un programa C a System.out con JNI?



metodos nativos en java (2)

Como escribió Alnitak, debería imprimir en stdout. Debe tener en cuenta que el mensaje puede tardar un rato en aparecer en la pantalla. En caso de que el momento sea importante, debe imprimir una marca de tiempo con el mensaje cuando imprima en stdout.

Invoco una biblioteca C a través de JNI que imprime en stdout. ¿Cómo puedo redirigir esta salida a System.out?


System.out es stdout . ¿Hay algún problema más fundamental que esté teniendo (producción mezclada, tal vez?).

Como otro miembro también ha mencionado ese último punto, debo explicarlo más a fondo:

System.out y stdout corresponden al descriptor de archivo n. ° 1.

Sin embargo, las bibliotecas OutputStream (y derivadas) de stdio y la biblioteca stdio de C tienen sus propios mecanismos de stdio (independientes) para reducir el número de llamadas a la llamada subyacente del sistema de write . Solo porque haya llamado a printf o similar, no se garantiza que su salida aparezca de inmediato.

Debido a que estos métodos de almacenamiento en búfer son independientes, la salida desde dentro del código de Java podría (en teoría) mezclarse o aparecer fuera de orden relativa a la salida del código de C.

Si eso es una preocupación, debe hacer arreglos para llamar a System.out.flush() antes de llamar a su función JNI, y en su función C (si está usando stdio lugar de la llamada de write bajo nivel) debe llamar a fflush(stdout) antes regresando