Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用LinkedList在C中共享内存_C_Linked List_Shared Memory - Fatal编程技术网

使用LinkedList在C中共享内存

使用LinkedList在C中共享内存,c,linked-list,shared-memory,C,Linked List,Shared Memory,我必须用C语言开发一个迷你shell。在这个项目中,我们必须处理局部变量和环境变量。所以我们可以有两个过程,共享环境变量,一个在孩子身上产生的变量,可以在父亲身上看到,反之亦然 我的老师说: 环境变量存储在共享内存区域中,共享内存区域由运行的shell的第一个副本创建,并使用envp数组中定义的所有变量进行初始化。在任何给定时间运行的shell的最后一个副本都必须破坏该空间。此共享内存区域将作为内存进行细分管理。共享内存区域是一个并发访问内存区域,具有多个可能的同时读取,但在给定时间仅可能有一个

我必须用C语言开发一个迷你shell。在这个项目中,我们必须处理局部变量和环境变量。所以我们可以有两个过程,共享环境变量,一个在孩子身上产生的变量,可以在父亲身上看到,反之亦然

我的老师说: 环境变量存储在共享内存区域中,共享内存区域由运行的shell的第一个副本创建,并使用envp数组中定义的所有变量进行初始化。在任何给定时间运行的shell的最后一个副本都必须破坏该空间。此共享内存区域将作为内存进行细分管理。共享内存区域是一个并发访问内存区域,具有多个可能的同时读取,但在给定时间仅可能有一个写入。实施必须优先考虑写作。

因此,我们需要与包含以下内容的链表共享内存:

  • 变量的名称(char*)
  • shmget()返回的int值
  • 以及shmat()返回的char*变量值
但是,当我们在父对象中创建环境变量时,子对象中没有

所以我觉得这个方法是不正确的,我们怎么能代表这个问题呢

也许不用链表

多谢各位

TF

我明白了! 我的老师让我创建一个固定大小的共享内存空间!现在很简单


谢谢大家

为什么要共享内存?环境变量已经在父进程和子进程之间共享。您首先应该知道命令如何在shell上执行。我相信您必须使用exec()系统调用,所以您需要进程间通信。Wikipedia有一个公平的选项列表共享内存是一项义务,因为我必须创建shell的作业。因此,我将envp的值复制到共享内存中,并希望共享它。我使用内部命令setenv(setenv foo=bar)创建了一个新的环境变量。这是我大学的一个项目,所以我不能对环境变量使用putenv函数。但是我的shell的setenv==putenv。“共享环境变量”我建议您仔细检查一下。这听起来与实际环境变量的行为非常相似,但同时又不同。正如您所说的任务,它比只使用普通环境变量的简单shell要难几个数量级。如果你浪费了很多精力来实现这些几乎是环境变量,而你的老师指的是简单诚实的真实环境变量,而你只是误解了它们,那将是一件很遗憾的事情。