Могу ли я разделить память между двумя процессами без прохождения? (В Android NDK) - PullRequest
0 голосов
/ 04 ноября 2018

Моя среда разработки - это Android Studio с NDK. Минимальный уровень SDK равен 26 для использования общего заголовка mem NDK. https://developer.android.com/ndk/reference/group/memory

Мне удается использовать общую память между ребенком и родителями. но проблема в том, что мне нужно сделать дескриптор файла до fork(). Вот как я это сделал.

  1. Создать дескриптор файла (AsharedMemory_create) из родителей.
  2. вилка ()
  3. mmap от ребенка с использованием родительского файлового дескриптора. Работайте с буфером.
  4. mmap от родителей для синхронизации и получения буфера.

Он отлично работает, но его нужно предварительно приготовить от родителей до разветвления. Я не хочу этого Кроме того, я не хочу использовать дескриптор файла Parcel в Java.

Я хочу создать общую память там, где я хочу, и поделиться с другим процессом, но не использовать ее Есть ли способ использовать «одинаковую» общую память между ребенком и родителями? или между разными процессами (такими как ребенок с ребенком)?

Я попытался создать дескриптор файла, который имеет То же имя, тот же размер в потомке и родителях для общей памяти, но это не работает. Также пытался сделать дескриптор файла и mmap у родителей после того, как child сделал то же самое, но это не сработало, даже если я не сделал munmap или не закрылся в child. Все, что я могу получить, это NULL у родителей или другого ребенка. это просто невозможно?

// ======================== (11.15.2018 Update) ================== ==============

  1. Создание ФД у ребенка и близких. Открой его от родителей (X)
  2. Создание ФД у ребенка и сна. Открой его от родителей (X)
  3. Создание fd в child и msync. Открой его от родителей (X)

1 Ответ

0 голосов
/ 28 ноября 2018

Я проверил много вещей, но это не может быть достигнуто. Волшебного решения не существует. Если я хочу использовать разделяемую память, которая использует FD другого процесса, мне нужно, чтобы FD получил это через IPC. Также Android предлагает Unix Domain Socket для передачи fd.

...