【发布时间】:2025-06-06 04:30:02
【问题描述】:
我正在编写一个服务器程序,它从客户端接收消息并将消息广播到所有以前的客户端。我需要在进程之间创建共享内存,但是共享内存似乎不起作用。
这是我的代码:
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);
}
当我在children进程中修改name_list时,其他进程似乎看不到这个修改。 任何人都可以提出任何建议吗?谢谢!!
更新:我尝试按照建议进行更改,但仍然无法正常工作。
name_list = (char*) shmat(shmid2, (void *)0, 0) ;
任何人都可以帮助我吗?非常感谢!
【问题讨论】:
-
1:请修复缩进,您的代码很难阅读。 2:你是如何“修改name_list”的?修改它指向的内存,还是修改变量?顺便说一句,请包括变量声明
-
已修复。你知道为什么这不起作用吗?
标签: c++ network-programming fork shared-memory