У меня есть часть кода, которая написана для записи в трубу из собственного кода в 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 и Native процессом, возможно, они разделяют канал? –
Чтобы поделиться, вам нужно вызвать C из Java с помощью функции, например: «jint Java_JAVAPACKAGE_writeToPipe (JNIEnv * env, jobject jObject)». Вам нужно узнать кое-что о JNI, чтобы сделать это должным образом. У вас есть пример в других вопросах, также жестко запрограммированных. http://stackoverflow.com/questions/12844418/android-using-pipe-between-native-and-java-apps – vgonisanz