gpt4 book ai didi

c - 在C中获取系统环境变量

转载 作者:行者123 更新时间:2023-11-30 15:47:46 27 4
gpt4 key购买 nike

我用 C 语言编写了一个应用程序,该应用程序应该读取环境变量并适本地处理这些更改。当应用程序启动时,我已将其设置为通过 setenv("MYVARIABLE", "TEST", 1) 继续初始化变量(以防止返回任何空指针)。 p>

此应用程序经常循环,在这些循环期间,其工作之一是通过 getenv("MYVARIABLE") 检查该全局变量。

当时的计划是让 shell 脚本或 python 脚本更改这些环境变量。 C 应用程序是全屏的,因此如果没有另一个终端条目,我无法测试此过程。在我的另一个终端 (c2) 中,我运行以下命令:

MYVARIABLE="My New Value"

export MYVARIABLE="My New Value"

不过,我的应用程序似乎没有捕获环境更新。相反,它继续坚持认为 MYVARIABLE 是“测试”,而不是“我的新值”。我不确定为什么这两个环境是分开的,但我需要它们一起工作。有谁知道我做错了什么?

我的系统正在运行 Archlinux,任何有兴趣的人都可以使用

最佳答案

您现在面临的问题是您仅在本地 shell session 的范围内设置了变量。例如:

(假设 bash)当您设置变量时,例如:

MYVARIABLE="My New Value"

它仅影响当前 shell,当您将其设置为:

export MYVARIABLE="My New Value"

它影响当前 shell 以及从当前 shell 启动的所有进程。

如果您在 .bashrc 文件中设置它,它将为所有将来的 session 永久设置它,但您需要获取该文件才能使其在当前 session 中工作。

<小时/>

最好的解决方案是 fork 一个进程。例如,如果您的程序名为 a.out,您可以执行:

> ./a.out &

这将允许您在程序运行时继续在 shell session 中工作,然后您可以在同一 session 中设置变量。

<小时/>

我见过的唯一其他选项是强制您的 shell session “自动”获取传入的内容:

1) 在您的第一个 session 中输入:

trap 'source ~/.bashrc' DEBUG

2) 然后在同一 session 中启动您的程序:

./a.out

3) 在第二个窗口中编辑 .bashrc 文件以添加新的环境变量

4) 在第二个窗口中获取文件的新版本:

source ~/.bashrc

现在,运行程序的第一个窗口已为其 session 设置了新的 var。我以前用过它,我知道它有效,但我从未在已经生成的应用程序上尝试过它..但我怀疑它应该适合你。

关于c - 在C中获取系统环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17220640/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com