根据文件:-
如果在 shmflg 中指定了 SHM_RDONLY,则附加该段以供读取,并且进程必须具有该段的读取权限。否则,该段将被附加以进行读取和写入,并且进程必须具有该段的读取和写入权限。不存在只写共享内存段的概念。
所以这里我传递 0,根据上面的语句将提供共享内存的读写访问权限。
ipcs 输出:-
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x5304f6ab 98307 root 666 64 1
附加到memroy的C++代码
//Get shared memory for given shm_id
uint8_t* mem = (uint8_t *) shmat(_shm_id, NULL, 0);
if ((void *) mem == (void *) -1){
// in selinux enable system I am keep on coming here, mem is alway 0XFFFFFFF..
return -1;
}
奇怪的是,当我在 shmat 函数中传递 SHM_RDONLY 标志时,我得到了正确的共享内存位置,即使共享内存的权限是读写。
这里唯一的区别是内存是由 root 创建的并读取其他用户(如 user1),但由于给出了 666 权限,我不认为这可能是一个问题,不确定 selinux 是否在这里引起了一些问题。