gpt4 book ai didi

C++:全局容器未被修改

转载 作者:行者123 更新时间:2023-11-28 07:34:28 28 4
gpt4 key购买 nike

我有以下 C++ 代码:

map<string, map<string, deque<Event> > > events;

int main(){
//set up socket and stuff here (omitted for clarity)
while(1){
newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &client_len);
if (newsockfd < 0)
error("ERROR on accept");

pid = fork();
if (pid < 0)
error("ERROR on event server fork");

if (pid == 0){ //Child Process
close(sockfd);

//do stuff here
read_and_send_ack (newsockfd);
exit(0);
}

else //Parent Process
close(newsockfd);
}

void read_and_send_ack (int sockfd)
{
// buffer is basically a string
//do some non important stuff here, omitted for clarity
event_received(buffer, &events);
}

void event_received(char* event_info, map<string, map<string, deque<Event> > >* events)
{
Event event = Event(event_info);
(*events)[string(event.device)][string(event.dev_id)].push_back(event);

//print keys to test if events are being modified each turn
for (map<string, map<string, deque<Event> > >::iterator it = events->begin(); it!=events->end(); ++it)
cout << it->first;
}

我希望全局容器“事件”在每次 while 循环接收到要添加到容器中的内容时被修改。但变化不会持续。结果,每当我打印出 key 时,容器中只有一把 key 。到底是怎么回事?我认为所有进程/线程都可以访问 C++ 中的同一个全局变量。

最佳答案

将我的评论变成答案。

当子进程由 fork() 创建时,它会获得自己的进程状态拷贝,包括全局变量。

如果您希望父进程和子进程进行通信,您必须为它们设置某种形式的 channel (例如管道、文件、共享内存或类似的东西)。

关于C++:全局容器未被修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17018669/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com