在android下不能通過shm_open使用共享內存。
網上有好多關於android下使用Ashmem實現共享內存的,但經過嘗試該方法可以mmap出內存,但是和另一個進程沒有實現共享。
具體的使用方法:
1)fd = open("/dev/ashmem", O_RDWR);
2)ioctl(fd, ASHMEM_SET_NAME, region_name);
3)ioctl(fd, ASHMEM_SET_SIZE, region_size);
4)ptr=mmap(NULL, len , PROT_READ|PROT_WRITE, MAP_SHARED , fd , 0);
上面方法沒有實現兩個進程間的內存共享。
使用以下方式實現了進程間的數據共享。
1>直接使用open("filename", O_RDWR|O_CREAT); 通過文件實現數據共享。
2>ParcelFileDescriptor和Ashmem結合使用。fd = open("/dev/ashmem", O_RDWR)創建出來的fd轉化成ParcelFileDescriptor通過aidl傳到另一進程。另個進程可以直接使用。