我承認,這是一個只是沒有點擊我的主題的作業,所以更多的解釋集中回答將不勝感激。無法將我的共享內存的名稱寫入管道
我想爲我的多個其他進程創建共享內存,以便能夠訪問給定共享內存的名稱。我的其他進程通過管道連接到父進程,我想在共享內存的名稱創建後寫入管道。這是我的代碼到目前爲止。我從來沒有能夠做到這一點。
當我寫出註釋時,該程序將工作一次。但是,當我嘗試再次運行該程序時,我需要更改名稱空間的名稱以使其正常工作。我不明白爲什麼會這樣。我確定有一個我不明白的功能之一。
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()'的標準對應物。 –