c – 在没有root权限的情况下实现共享内存

weixin_38081906 2019-09-12 01:59:11
我有以下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(键,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
...全文
71 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38112450 2019-09-12
  • 打赏
  • 举报
回复
您可以为您创建的共享内存段授予权限.默认情况下,只允许root访问,但您可以在创建共享内存段时更改此值,例如: shmid = shmget(key, SHMSZ, IPC_CREAT | 0666); //or shmid = shmget(key, SHMSZ, IPC_CREAT | 0777); 然后,您可以尝试以任何用户身份访问此共享内存段.

433

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧