“按需”服务器中全局结构的共享内存段

时间:2017-04-29 15:12:38

标签: c struct tcp server shared-memory

我必须为学术目的创建一个基于TCP协议的“按需服务器”。客户端每次都发送一个KEY和一个VALUE,我必须使用两个函数将它们存储在一个全局结构中。

修改 如果客户要求 put ,我必须在结构中存储值< / strong>客户端发送到服务器。如果客户要求获取,我必须在结构中搜索并返回到客户端。因为每次新的客户端连接并在结构中写入/读取时都使用fork,所以其他子节点(客户端)不可能看到第一个在结构中创建的更改,所以我必须让结构对每个子节点都可见。但这不会因某种原因发生。

贝娄是我尝试的代码。

注意:无法更改put()和get()函数的参数。

我的解决方案不起作用,我试图找出原因!我是“共享记忆”的新手,我希望我能在这里找到一些帮助。

1 个答案:

答案 0 :(得分:1)

我认为对共享内存段的工作方式存在各种误解。

1.您正在为结构创建共享内存,但不为结构元素创建共享内存。您还需要将keyvalue.keyskeyvalue.values附加到共享内存段。请记住,在C语言中,结构就像指向其元素的指针。所以你只为这个&#34;指针&#34;创建一个内存段。 (如果我错了,有人可以纠正我)

2.正在创建的每个新子进程都有自己的内存映射。因此,您必须每次手动将每个新进程手动附加到结构的此共享内存段。完成后,您可以取消附加子进程。 (这是你的下一个逻辑问题)

3.如果我做对了,请在这些代码行中

        close(acceptfd);
}//while(1) end

父亲正在从共享记忆片段中解脱出来。这将导致新的子进程没有要附加的共享内存段。由于您正在创建一个服务器,并且您希望它能够永远运行并且#39; ,如果要从共享内存段中取消附加父进程,则只能在SIGINT上进行系统调用。所以在CTRL + C之前,SIGINT操作的功能也将从sh.m中取代父亲。分割。如果您未关闭该细分受众群,可以稍后通过终端手动完成。

希望我能以某种方式帮助!