我承认,这是一个只是没有点击我的主题的作业,所以更多的解释集中回答将不胜感激。无法将我的共享内存的名称写入管道
我想为我的多个其他进程创建共享内存,以便能够访问给定共享内存的名称。我的其他进程通过管道连接到父进程,我想在共享内存的名称创建后写入管道。这是我的代码到目前为止。我从来没有能够做到这一点。
当我写出注释时,该程序将工作一次。但是,当我尝试再次运行该程序时,我需要更改名称空间的名称以使其正常工作。我不明白为什么会这样。我确定有一个我不明白的功能之一。
int shm;
char *p;
shm = shm_open("Name", O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);
size_t len = 4 * 255;
if (ftruncate(shm, len) == -1) {
perror("Truncate");
return 1;
}
p = mmap(0, 4, PROT_WRITE, MAP_SHARED, shm, 0);
if (p == MAP_FAILED){
perror("mmap");
return 1;
}
write(fd[1], "Name", 30);
printf("Initiator: Shared memory for Consonanats is %d.\n", shm);
任何打开的资源在完成后都应该关闭。你应该'shm_close'你的共享内存。每次重新运行程序时,这可能会摆脱改变命名空间的需要。 – Hypino
共享内存段的名称应该以斜杠('/')开头。 –
@Hypino,你好像拼错了“'shm_unlink'”。没有'shm_close()',至少不是'shm_open()'的标准对应物。 –