vik*_*cks 3 c linux ipc shared-memory
我有以下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");
}
Run Code Online (Sandbox Code Playgroud)
当没有root权限执行时
meow@darkArts ~/Arena/c $ gcc shm.c && ./a.out
SHMKEY: Success
SHMGET: Success
SHMAT: Permission denied
Run Code Online (Sandbox Code Playgroud)
当由root用户执行时,我得到以下消息
root@darkArts:/home/meow/Arena/c# gcc shm.c && ./a.out
SHMKEY: Success
SHMGET: Success
SHMAT: Success
Run Code Online (Sandbox Code Playgroud)
是否可以在没有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
Run Code Online (Sandbox Code Playgroud)
小智 5
您可以授予创建的共享内存段的权限。默认情况下,只允许root用户访问,但是您可以在创建共享内存段时更改它,例如:
shmid = shmget(key, SHMSZ, IPC_CREAT | 0666);
//or
shmid = shmget(key, SHMSZ, IPC_CREAT | 0777);
Run Code Online (Sandbox Code Playgroud)
然后,您可以尝试以任何用户身份访问此共享内存段。
| 归档时间: |
|
| 查看次数: |
4738 次 |
| 最近记录: |