Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在android ndk中使用c代码打开文件时返回null的管道_Android_C_Android Ndk_Pipe - Fatal编程技术网

在android ndk中使用c代码打开文件时返回null的管道

在android ndk中使用c代码打开文件时返回null的管道,android,c,android-ndk,pipe,Android,C,Android Ndk,Pipe,我正在尝试为我的android应用程序编写一些本机代码,它使用两个文件管道在java代码和本机代码之间进行通信。最终的目标是让本机代码通过网络进行通信,而java代码只监听管道两端的输入和输出数据。这是我从java应用程序调用的代码: JNIEXPORT void JNICALL Java_com_test_fdtest_Bindings_openSession(JNIEnv *env, jobject this) { int inpipe[2]; int outpipe[2]; FILE *i

我正在尝试为我的android应用程序编写一些本机代码,它使用两个文件管道在java代码和本机代码之间进行通信。最终的目标是让本机代码通过网络进行通信,而java代码只监听管道两端的输入和输出数据。这是我从java应用程序调用的代码:

JNIEXPORT void JNICALL Java_com_test_fdtest_Bindings_openSession(JNIEnv *env, jobject this)
{
int inpipe[2];
int outpipe[2];
FILE *in;
FILE *out;
if(pipe (inpipe)) {
    __android_log_print(ANDROID_LOG_DEBUG, DEBUG_TAG, "Unable to set up input pipe");
    return;
}
if(pipe (outpipe)) {
    __android_log_print(ANDROID_LOG_DEBUG, DEBUG_TAG, "Unable to set up output pipe");
    return;
}
in = fdopen(inpipe[0], "w");
out = fdopen(outpipe[1], "r");
if(in == NULL) {
    __android_log_print(ANDROID_LOG_DEBUG, DEBUG_TAG, "input pipe null");

}
if(out == NULL) {
    __android_log_print(ANDROID_LOG_DEBUG, DEBUG_TAG, "output pipe null");

}
}
从中我得到了输出:

06-04 09:44:41.759: D/dalvikvm(1443): Trying to load lib /data/data/com.test.fdtest/lib/libfdtest.so 0x414955a8
06-04 09:44:41.789: D/dalvikvm(1443): Added shared lib /data/data/com.test.fdtest/lib/libfdtest.so 0x414955a8
06-04 09:44:41.789: D/NDK_BINDINGS(1443): input pipe null
06-04 09:44:41.799: D/NDK_BINDINGS(1443): output pipe null
这看起来很奇怪。似乎管道设置正常,但打开文件时失败。这段代码是否存在根本性的错误,因为文档似乎表明这是可行的

感谢您从手册页提供的帮助:

pipefd[0] refers to the read end of the pipe.  pipefd[1] refers to the
write end of the pipe.
您试图打开
inpipe
的读取端进行写入,打开
outpipe
的写入端进行读取。如果打印
errno
,您可能会看到每一个