Всем доброго вечера, я хочу протестировать возможность отправить сообщение между процессами в Android через именованный канал, для этого написал программку на С Код (Text): #include <stdio.h> #include <unistd.h> #include <sys/stat.h> #include <fcntl.h> #include <asm-generic/fcntl.h> // for open #include <sys/wait.h> #define MAX_BUF 100 #define EXIT_FAILURE 2 int main() { char * myfifo = "/data/local/tmp/myfifo"; pid_t pid_1 = 0; /* create the FIFO (named pipe) */ if(mkfifo(myfifo, 0666) != 0) { printf("mkfifo failed, errno = %d\n", errno); unlink(myfifo); return 1; } /* write "Hi" to the FIFO */ switch(pid_1=fork()) { case -1: printf("fork error %d\n", pid_1); /* произошла ошибка */ break; case 0: { char buf[MAX_BUF]; int fd; printf("Child\n"); fd = open(myfifo, O_RDONLY | O_NONBLOCK); if (fd == -1) { printf("client open FIFO error\n"); /* произошла ошибка */ unlink(myfifo); return EXIT_FAILURE; } if(read(fd, buf, MAX_BUF)>0) printf("Received: %s\n", buf); unlink(myfifo); break; } default: { int fd; int status=0; sleep(2); fd = open(myfifo, O_WRONLY); if (fd == -1) { printf("server open FIFO error\n"); /* произошла ошибка */ unlink(myfifo); return EXIT_FAILURE; } write(fd, "Hi", sizeof("Hi")); close(fd); waitpid(pid_1, &status, 0); /* remove the FIFO */ unlink(myfifo); break; } } return 0; } Программка тестовая, но все же старался сделать правильнее. Но почему то возникают проблемы при работе Логи получаю следующие Child server open FIFO error Child exited with status 2 Приму любые комментарии, под Linux писать только начал, и поэтому не много путаюсь. Почему сервер не может открыть именованный канал? Я понимаю, что можно воспользоваться strace, но на Android его нет.
http://stackoverflow.com/questions/2740321/how-to-create-named-pipe-mkfifo-in-android#2760267 по идее, все примеры стандартных кодов есть в инете -- и камлать велосипед не требуется
Благодарю за ответ, но это не совсем то. У меня создается сам pipe, но есть проблемы с его открытием. И второе, по ссылке в коментах,автор пишет, что начиная с android 5.1 у него есть проблемы с открытием локальных сокетов. http://stackoverflow.com/questions/31068440/cannot-connect-to-native-local-socket-on-android-5-1
В общем я сумел поковыряться во всяком и нашел ответ на Linux Mint, на android пока проверить не могу. В общем я изменил мод в mkfifo и удалил nonblock из open со стороны клиента.