我正在寫一個服務器程序,它從客戶端接收消息並向所有以前的客戶端廣播消息。我需要在進程之間創建共享內存,但似乎共享內存不起作用。進程之間不共享共享內存
這裏是我的代碼:
int shmid2; key_t key2; void* shm2;
string name_list;
key2=ftok("tmp",'d');
//create
if ((shmid2 = shmget (key2, sizeof(char)*1000, IPC_CREAT | 0666)) < 0) {
perror("shmget2");
exit(1);}
//attach
shm2 = shmat(shmid2, (void *)0, 0) ;
name_list= (char*) shm2;
if (shm2 == (char *) -1) {
perror("shmat2");
exit(1);}
... do other things...
switch (pid=fork()){
case -1:
{ perror("ERROR on fork");
break;}
case 0://children
{
...modify name_list by getting message and append message to name_list..
name_list.append(message);
break;}
default://parent
close(connection);
}
當我修改孩子的過程name_list中,似乎這種修改不被其他進程可見。 任何人都可以提出任何建議嗎?謝謝!!
更新:我試圖改變這個建議,但仍然無法正常工作。
name_list = (char*) shmat(shmid2, (void *)0, 0) ;
任何人都可以幫助我嗎?非常感謝!
1:請修復縮進,很難讀取您的代碼。 2:你如何修改name_list?修改它指向的內存,或修改變量?順便說一句,請包括固定的變量聲明 – Javier 2010-10-09 01:22:28
。你有什麼想法,爲什麼這不起作用? – QiLi 2010-10-09 01:38:44