我有以下C程序
#include <stdio.h>
#include <sys/types.h>
#include <sys/shm.h>
#include <sys/ipc.h>
int main()
{
key_t shm_key;
int shm_flag,shm_id,shm_size;
void *shm_addr;
shm_key = ftok("/home/meow/Arena",22);
perror("SHMKEY");
shm_id = shmget(shm_key,sizeof(int)*20,IPC_CREAT);
perror("SHMGET");
shm_addr = shmat(shm_id,NULL,0);
perror("SHMAT");
}
当没有root权限执行时我得到
meow@darkArts ~/Arena/c $ gcc shm.c && ./a.out
SHMKEY: Success
SHMGET: Success
SHMAT: Permission denied
当root用户执行时,我收到以下消息
root@darkArts:/home/meow/Arena/c# gcc shm.c && ./a.out
SHMKEY: Success
SHMGET: Success
SHMAT: Success
是否可以在没有root权限的情况下将共享内存绑定到我的地址空间?
shmid = shmget(key, SHMSZ, IPC_CREAT | 0666);
和shmid = shmget(key, SHMSZ, IPC_CREAT | 0777);
我得
meow@darkArts ~/Arena/c $ gcc shm.c && ./a.out
SHMKEY: Success
SHMGET: Permission denied
SHMAT: Invalid argument
答案 0 :(得分:5)
您可以为您创建的共享内存段授予权限。默认情况下,只允许root访问,但您可以在创建共享内存段时更改此值,例如:
shmid = shmget(key, SHMSZ, IPC_CREAT | 0666);
//or
shmid = shmget(key, SHMSZ, IPC_CREAT | 0777);
然后您可以尝试以任何用户身份访问此共享内存段。