在Android平台中阻止共享内存中写入数据吗?

时间:2014-02-26 10:22:14

标签: android android-ndk

在Android原生中,我使用API​​ ashmem_create_region创建了共享内存,如

fd = ashmem_create_region("SharedRegionName", 1024);
char* base_address = mmap(NULL, 1024, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);

这会创建我传递给应用程序的原生 int fd

内部应用程序我试图将128个字节写入此共享内存,该内存无法写入并返回写入len = 0。

    ParcelFileDescriptor pfd = ParcelFileDescriptor.adoptFd(native.getFD());
    Log.d(TAG, "pfd : "+pfd );
    FileDescriptor fd = pfd.getFileDescriptor();
    FileOutputStream fos = new FileOutputStream(fd);
    FileChannel fc = fos.getChannel();
    ByteBuffer bytebuf = ByteBuffer.allocateDirect(128);
        for (int i=0; i<128; i++) {
           bytebuf.put((byte)(i));
    }

    try {
      int len = fc.write(bytebuf);
      Log.d( TAG, "fc.len "+len);
    } catch (IOException e) {
      e.printStackTrace();
    } 

日志是: - pfd:{ParcelFileDescriptor:FileDescriptor [51]}

fc.len 0

我不确定,但看起来平台不允许或阻止在共享内存上写入,如果有人尝试过,请确认或在此过程中出现问题时请告诉我。

0 个答案:

没有答案