c语言 - "On demand"服务器中全局结构的共享内存段



我必须为学术目的创建基于TCP协议的"按需服务器"。客户每次发送一个键和值我必须使用两个函数将它们存储在全球结构中的值。

编辑:如果客户端要求 put 我必须存储在 struct key value 客户端发送到服务器。如果客户端要求 get 我必须在struct中搜索,返回 value 。由于我每次使用叉子都使用叉子连接和写入/阅读结构,因此其他孩子(客户(不可能看到结构上的第一个上的更改,因此我必须使每个孩子都能看到结构。但这不是出于某种原因而发生的。

Bellow是我尝试的代码。

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

我的解决方案不起作用,我正在尝试找出原因!我对"共享记忆"事物非常陌生,希望我在这里找到一些帮助。

我认为关于共享内存段的工作方式有多种误解。

1.您正在为结构创建共享内存,但不是为结构的元素创建共享内存。您还需要将keyvalue.keyskeyvalue.values附加到共享内存段。请记住,在C语言中,一个结构就像指向其元素的指针。因此,您仅为此"指针"创建一个内存段(如果我错了,可以纠正我(

2.正在创建的每个新的儿童过程都有其自己的内存图。因此,您必须每次手动将每个新过程手动附加到此结构的共享内存段。完成后,您可以删除孩子的过程。(这是您的下一个逻辑问题(

3.如果我正确地说,在这些代码

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

父亲正在与共享的段落中脱颖而出。这将导致新的子过程没有共享的内存段可附加到。由于您要创建服务器,并且希望它运行"永远",如果您想从共享内存段中删除父亲进程,则只能在Sigint上的系统调用中进行操作。因此,就在Ctrl C之前,Sigint操纵的功能也将使父亲从Sh.M.部分。如果您不关闭该细分市场,则可以在以后通过终端手动进行操作。

希望我以某种方式帮助!

最新更新