Androidのネイティブコードからパイプに書き込むために書かれたコードの一部があります。ただし、プログラムは書き込み操作をブロックしていないようです。 私の理解によれば、プログラムは最終的にパイプから読み込むプロセスがあるまで書き込みをブロックする必要があります。以下のコードで何が間違っているのか、なぜブロックせずに終了するのか教えてください。Androidでのパイプの問題
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
#include <unistd.h>
int main()
{
const char* PATH = "/data/data/com.endpoint.login/v_pipe8";
char* line = "Hello Pipe!";
int pipe;
mode_t mode = S_IRWXU | S_IRWXG | S_IRWXO;
pipe = mkfifo(PATH, mode);
if (pipe == -1)
{
printf("mkfifo failure\n");
}
sleep(1);
int err = write(pipe,line,strlen(line));
if (err == -1)
{
printf("write error in the pipe\n");
}
close(pipe);
return 0;
}
Javaとネイティブプロセスの間でパイプを共有する必要があります。あなたが言及したJNIの部分を理解できませんでした。パイプのパスが既にJavaとネイティブプロセスの間にある場合、それらはパイプを共有しませんか? –
共有するには、 "jint Java_JAVAPACKAGE_writeToPipe(JNIEnv * env、jobject jObject)"のような関数でJavaからCを呼び出す必要があります。 JNIについては、有益なことをするために何かを学ぶ必要があります。他の質問にも例があり、ハードコーディングされています。 http://stackoverflow.com/questions/12844418/android-using-pipe-between-native-and-java-apps – vgonisanz