我可以在两个进程之间共享内存而没有任何通过吗? (在Android NDK中)

时间:2018-11-04 15:16:54

标签: android android-ndk shared-memory file-descriptor

我的开发环境是带有NDK的Android Studio。使用NDK共享mem标头的最低SDK级别为26。 https://developer.android.com/ndk/reference/group/memory

我成功使用了孩子和父母之间的共享内存。但是问题是,我需要在fork()之前创建文件描述符。以下是我的操作方法。

  1. 从父母那里获取文件描述符(AsharedMemory_create)。
  2. fork()
  3. 来自子级的
  4. mmap使用父级文件描述符。在缓冲区上处理一些东西。
  5. 父母的
  6. mmap用于同步并获取缓冲区。

它工作正常,但需要在叉子之前由父母预先制作。我不要另外,我不想在Java中使用Parcel文件描述符。

我想在任何需要的地方共享内存,并与其他进程共享,但不使用通过它。有没有办法在孩子和父母之间使用“相同”的共享内存?还是在不同的过程之间(像有孩子的孩子)?

我尝试使文件描述符在子代和父代中具有相同名称,相同大小,以共享内存,但是它不起作用。在孩子做完同样的事情后,还试图在父母中制作File描述符和mmap,但即使我没有munmap或在孩子中关闭也无法使用。我只能得到NULL的父母或其他孩子。不可能吗?

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

  1. 让fd进入孩子并关闭。从父母(X)打开它
  2. 让fd在儿童中入睡。从父母(X)打开它
  3. 在child和msync中设置fd。从父母(X)打开它

1 个答案:

答案 0 :(得分:0)

我检查了很多事情,但无法完成。没有神奇的解决方案。 如果我想使用使用其他进程的FD的共享内存,则需要FD通过IPC获得它。 android还建议 Unix域套接字通过fd。