안녕하세요.
앱 개발을 하는데 있어서 서버측 구현을 하다가
JNI 때문에 질문을 드립니다.
JNI를 사용함에 있어서 ms의 stdio.h를 사용하는데요.
printf를 사용해보니 순서가 너무 뒤죽박죽이여서 어떻게 해야될지를 모르겠습니다.
자바의 sysout과 C의 printf가 서로 다른 스택에서 작동되는거 같은데 어떻게 하면
정상적인 순서로 나올까요.
아래 소스도 같이 올려드립니다.
--Java소스
public class helloMain {
static HelloWorld hw = new HelloWorld();
public static void main(String[] args){
System.out.println(hw.add(45, 11));
hw.print();
System.out.println("22424");
}
}
--C소스
#include <jni.h>
#include <stdio.h>
#include "HelloWorld.h"
JNIEXPORT void JNICALL Java_HelloWorld_print (JNIEnv *env, jobject obj){
printf("Hello Worlds!!");
return;
}
JNIEXPORT jint JNICALL Java_HelloWorld_add (JNIEnv *env, jobject obj, jint a, jint b){
printf("yayayaya!");
return a+b;
}
--출력결과
56
22424
yayayaya!Hello Worlds!!
제가 이해하는 소스코드상에서는 출력결과가..
yayayaya!
56
Hello Worlds!!
22424
라는 순서로 출력되는게 맞다고 생각되어지지만..
실제로는 안그렇네요..
어떻게 하면 정상적인 출력구조를 가질수 있을까요?
고수님들의 지식이 필요합니다.
지나가시다가 조금이라도 아시는게 있다면
주저하지 마시고 댓글좀 써주시면 감사하겠습니다.




재미있는 문제군요. flush 관련 문제로 일단 보이는데요.
검색해보니 이런 글이 있습니다.
http://stackoverflow.com/questions/1716296/why-does-printf-not-flush-after-the-call-unless-a-newline-is-in-the-format-strin
귀차니즘으로 자세히 다 읽어보진 않았습니다만,
여러가지 말이 많습니다.
- c printf 는 버퍼링이 된다. 'new line' 문자가 들어오면 flush 된다.
- msdn 에 의하면 ms 의 런타임??에서는 'new line' 없이도 즉시 flush 된다.
제가 테스트 환경이 안되서....
직접 읽어보시고 테스트도 해보시고 결과까지 알려주시면 좋을 거 같이요 ;) ===3==3