使用LinkedList在C中共享内存
我必须用C语言开发一个迷你shell。在这个项目中,我们必须处理局部变量和环境变量。所以我们可以有两个过程,共享环境变量,一个在孩子身上产生的变量,可以在父亲身上看到,反之亦然 我的老师说: 环境变量存储在共享内存区域中,共享内存区域由运行的shell的第一个副本创建,并使用envp数组中定义的所有变量进行初始化。在任何给定时间运行的shell的最后一个副本都必须破坏该空间。此共享内存区域将作为内存进行细分管理。共享内存区域是一个并发访问内存区域,具有多个可能的同时读取,但在给定时间仅可能有一个写入。实施必须优先考虑写作。 因此,我们需要与包含以下内容的链表共享内存:使用LinkedList在C中共享内存,c,linked-list,shared-memory,C,Linked List,Shared Memory,我必须用C语言开发一个迷你shell。在这个项目中,我们必须处理局部变量和环境变量。所以我们可以有两个过程,共享环境变量,一个在孩子身上产生的变量,可以在父亲身上看到,反之亦然 我的老师说: 环境变量存储在共享内存区域中,共享内存区域由运行的shell的第一个副本创建,并使用envp数组中定义的所有变量进行初始化。在任何给定时间运行的shell的最后一个副本都必须破坏该空间。此共享内存区域将作为内存进行细分管理。共享内存区域是一个并发访问内存区域,具有多个可能的同时读取,但在给定时间仅可能有一个
- 变量的名称(char*)
- shmget()返回的int值
- 以及shmat()返回的char*变量值
谢谢大家 为什么要共享内存?环境变量已经在父进程和子进程之间共享。您首先应该知道命令如何在shell上执行。我相信您必须使用exec()系统调用,所以您需要进程间通信。Wikipedia有一个公平的选项列表共享内存是一项义务,因为我必须创建shell的作业。因此,我将envp的值复制到共享内存中,并希望共享它。我使用内部命令setenv(setenv foo=bar)创建了一个新的环境变量。这是我大学的一个项目,所以我不能对环境变量使用putenv函数。但是我的shell的setenv==putenv。“共享环境变量”我建议您仔细检查一下。这听起来与实际环境变量的行为非常相似,但同时又不同。正如您所说的任务,它比只使用普通环境变量的简单shell要难几个数量级。如果你浪费了很多精力来实现这些几乎是环境变量,而你的老师指的是简单诚实的真实环境变量,而你只是误解了它们,那将是一件很遗憾的事情。