我正在编写一个应用程序,生产者负责制作和发送消息,消费者负责获取消息。我必须在生产者应用程序中设置环境变量并在消费者应用程序中读取它。
在生产者应用程序中我执行了此命令
putenv("MSG_KEY=15");
在消费者应用程序中,我尝试获取这样的变量
char *z=getenv("MSG_KEY");
但它不返回任何值(我得到零值)。如果我在生产者中编写相同的命令,如果我在几行之前使用 putenv()
,它就会起作用。我认为问题在于它仅在本地设置变量,因此我无法从另一个程序访问它,但我不知道如何解决它。
不知道这是否重要,但我使用的是 Linux 系统。
最佳答案
环境变量是进程私有(private)的。您不能在一个进程中设置它们并期望在另一进程中读取它们。
您可以通过环境变量与另一个进程进行任何通信的唯一时间是从父进程到子进程,并且仅在父进程生成子进程时。父进程在生成子进程时可以复制、修改、添加或删除环境变量。从此他们彻底分开了。一个进程对变量所做的更改对另一进程不可见。
关于C 生产者/消费者应用程序使用 getenv() 获取环境变量不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34569719/