Перенаправить вывод из библиотеки JNI - PullRequest
0 голосов
/ 06 октября 2011

Я ищу способ перенаправить / захватить вывод stdout собственной библиотеки в простом приложении для Android. Я видел пару сообщений на эту тему, но я не нашел ответов на свои вопросы.

Как можно больше, я бы хотел избежать работы с существующей нативной библиотекой. Мой первый импульс - использовать файл fifo и перенаправить вывод нативной библиотеки. Кажется, я не могу пройти вызов Runtime.getRuntime (). Exec ("mkfifo (, 0666)"). Я пытаюсь создать файл в / data / data /, но кажется, что файл не существует после запуска программы. Я также не могу найти 'mkfifo' в файловой системе Android (через оболочку adb).

Пара глупых вопросов: - Где Макфифо? - Смогу ли я увидеть файл fifo после запуска программы, или есть ли более надежный способ проверить существование fifo из Java после запуска вышеуказанной команды? - Есть ли другой / лучший подход для этого?

Спасибо.

Ответы [ 2 ]

1 голос
/ 06 октября 2011

Вы хотите перенаправить его конкретно в файл?Тогда вы, вероятно, захотите сделать следующее:

int fd = open(filename, "w");
dup2(fd, 1);
close(fd);

Я понятия не имею, как это повлияет на подсистему Java.

Также обратите внимание, что /data/data может быть недоступным для записи.Песочница приложения находится под /data/data/com.mypackage/, и Android ожидает, что вы создадите подкаталоги для своих данных через Context.getDir()./sdcard всегда доступен для записи, но сначала нужно проверить доступность - карта по определению является съемной.

Если перенаправление в файл не является вашим конечным желанием, тогда pipe() может быть лучшим выбором.dup2() конец записи в 1 и чтение из конца чтения, предпочтительно в другом потоке.Тогда вам решать, что делать с прочитанными данными.

0 голосов
/ 27 сентября 2013

Это очень просто в вашем случае:

Process process = Runtime.getRuntime().exec(cmd);
InputStream processOut = process.getInputStream();
InputStream processError = process.getErrorStream();

Но я не могу найти решение для себя. У меня есть библиотека Java, которая помещает свое содержимое в файл (обозначается String fileName или FileDescriptor fd). Также есть родная библиотека. Мне нужно перенаправить вывод с первого на вход второй библиотеки. Я думал, что fifo - это решение, но файловая система Android является fat32 и не может иметь файлов FIFO .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...