【发布时间】:2015-03-01 00:15:45
【问题描述】:
我刚刚阅读了shm_open 和shmat 的手册页,并尝试了以下示例。在文件test.c 我愿意,
int main(int argc, char **argv) {
void *retval;
long shmid = atol(argv[1]);
retval = shmat(shmid, NULL, SHM_RDONLY);
printf("%p\n", retval);
}
在我做的包装文件中,
int setupshm(char *name) {
int shmid;
shmid = shm_open(name, O_CREAT|O_RDWR, 0666);
return shmid;
}
int main() {
char **envp = NULL;
char *argv[3];
char num[10];
sprintf(num, "%d", setupshm("whatever"));
argv[1] = "./test";
argv[2] = num;
argv[3] = NULL;
execve("./test", argv, envp);
}
我尝试在 test.c 中添加 strerror(errno) 并得到 Identifier removed。这意味着什么?我究竟做错了什么?给定一个共享内存标识符(shmid),我不应该能够从任何进程访问共享内存吗?
【问题讨论】:
标签: c linux linux-kernel shared-memory