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

标签 c linux environment-variables getenv

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

在生产者应用程序中我执行了此命令

putenv("MSG_KEY=15");

在消费者应用程序中,我尝试获取这样的变量

char *z=getenv("MSG_KEY");

但它不返回任何值(我得到零值)。如果我在生产者中编写相同的命令,如果我在几行之前使用 putenv() ,它就会起作用。我认为问题在于它仅在本地设置变量,因此我无法从另一个程序访问它,但我不知道如何解决它。 不知道这是否重要,但我使用的是 Linux 系统。

最佳答案

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

您可以通过环境变量与另一个进程进行任何通信的唯一时间是从父进程到子进程,并且在父进程生成子进程时。父进程在生成子进程时可以复制、修改、添加或删除环境变量。从此他们彻底分开了。一个进程对变量所做的更改对另一进程不可见。

关于C 生产者/消费者应用程序使用 getenv() 获取环境变量不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34569719/

相关文章:

c++ - 矢量化是什么意思?

linux - 如何从命令行删除 unix(Mac OSX) 中名为 "-d"的文件?

linux - 为什么 setscheduler 不强制需要重新安排

java - 检查路径中是否存在带有环境变量的文件(Windows 平台)

c - 对于每个 int x : x+1 > x . ... 这总是正确的吗?

c - fopen 与 stat 的性能

linux - 在后台运行 iperf 并将输出重定向到文件

apache - 基于TLD在.htaccess中设置环境变量

powershell - Github 操作 : set environment variable for Windows build with PowerShell

c - 我如何在没有 IDE 的情况下找到声明/定义?