에뮬레이터 내부의 files 디렉토리에 파일을 생성해 놓으면 일반적인 안드로이드 app의 경우 정상적으로 읽기 쓰기가 가능했습니다.

하지만 디바이스를 건드려야 하는 프로젝트를 진행중이라 jni를 이용해 c에서는 장치파일을 접근하고 안드로이드 어플이

이를 컨트롤하도록 하려 합니다. 이경우 파일을 어디에 위치시켜야 읽기쓰기가 가능할까요?

아래는 소스 입니다. hello-jni 예제에서 c 파일만 약간 수정한 것입니다.

/* c 소스파일 */
 17 #include <string.h>
 18 #include <jni.h>
 19 #include <sys/types.h>
 20 #include <sys/stat.h>
 21 #include <fcntl.h>
 22
 30 jstring
 31 Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,
 32                                                   jobject thiz )
 33 {
 34     int fd;
 35     char temp[10];
 36     memset(temp, 0, 10);
 37     fd = open("input.txt", O_RDONLY);
 38     read(fd, temp, 9);
 39     temp[10] = 0;
 40     close(fd);
 41     return (*env)->NewStringUTF(env, temp);
 42 }

input.txt 파일에서 데이터를 읽어 temp 배열에 저장해 NewStringUTF를 호출하는 아주 단순한 소스입니다.

문제는 open이 0을 리턴합니다. 즉 open조차 안되고 있습니다. 아마 files 가 아닌 다른 디렉토리거나 권한 문제일 것으로 생각됩니다.

/* java 소스파일 */

 29 public class HelloJni extends Activity
 30 {
 31     /** Called when the activity is first created. */
 32     @Override
 33     public void onCreate(Bundle savedInstanceState)
 34     {
 35         super.onCreate(savedInstanceState);
 36
 37         /* Create a TextView and set its content.
 38          * the text is retrieved by calling a native
 39          * function.
 40          */
 41         TextView  tv = new TextView(this);
 42         tv.setText( stringFromJNI() );
 43         setContentView(tv);
 44     }
 84     public native String  stringFromJNI();
 96     public native String  unimplementedStringFromJNI();
 97
103     static {
104         System.loadLibrary("hello-jni");
105     }
106 }

이것은 java 소스로 수정하지 않았습니다. jni 에서는 파일의 엑세스 위치가 어떻게 되나요??