System.out
- stdout
. Есть ли у вас более фундаментальная проблема (возможно, перепутали результаты?).
Так как другой член также упомянул этот последний момент - я должен объяснить далее:
System.out
и stdout
оба соответствуют дескриптору файла № 1.
Однако и Java OutputStream
(и производные классы), и библиотека C stdio
имеют свои собственные (независимые) механизмы буферизации, чтобы уменьшить количество вызовов базового системного вызова write
. Просто потому, что вы позвонили printf
или тому подобное, не гарантируется, что ваш вывод будет отображаться сразу.
Поскольку эти методы буферизации являются независимыми, выходные данные из Java-кода могут (теоретически) быть перепутаны или иначе отображаться не по порядку относительно выходных данных из кода C.
Если это вызывает озабоченность, вы должны договориться о вызове System.out.flush()
перед вызовом вашей функции JNI, и в вашей функции C (если она использует stdio
вместо низкоуровневого write
вызова), вы должны вызвать fflush(stdout)
до возвращения.