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를 유용하게 사용하려면 JNI에 대해 배워야합니다. 당신은 하드 코딩 된 다른 질문에 예제를 가지고 있습니다. http://stackoverflow.com/questions/12844418/android-using-pipe-between-native-and-java-apps – vgonisanz