C生产者/消费者应用程序使用getenv()获取环境变量不起作用

时间:2016-01-02 19:17:46

标签: c linux environment-variables getenv

我正在为制作和发送消息的制作人和正在获取消息的消费者编写应用程序。我必须在生产者应用程序中设置环境变量并在消费者应用程序中读取它。

在制片人应用程序中,我执行了此命令

putenv("MSG_KEY=15");

在消费者应用程序中,我试图获得像这样的变量

char *z=getenv("MSG_KEY");

但它没有返回任何值(我得到零值)。如果我在生成器中编写相同的命令,那么如果我之前使用putenv()几行,它就可以工作。我认为问题是它只在本地设置变量,所以我不能从另一个程序访问它,但我不知道如何解决它。 不知道它是否重要但我使用的是Linux系统。

1 个答案:

答案 0 :(得分:4)

环境变量对进程是私有的。您不能在一个过程中设置它们并期望在另一个过程中读取它们。

您可以通过环境变量向另一个进程进行任何通信的唯一时间是从父进程到子进程,而在父进程生成子进程时仅 。父级可以在生成子级时复制,修改,添加或删除环境变量。从那时起,他们变得完全分开。将一个进程更改为变量,对另一个进程不可见。