tcl文件无法获取通过代码[关闭]设置的环境变量

问题描述 投票:-2回答:1

我使用putenv通过我的代码设置了环境变量。我正在通过tcl文件读取环境变量。似乎,在Windows中显示以下错误:无法读取“env(myvar)”:没有这样的变量,没有这样的变量(读取“env(myvar)”上的跟踪)从“puts $ env(myar)”中调用)”

但在Linux中,错误并未到来。

putenv用于设置环境变量$ env()在tcl文件中用于获取env。

c++ linux windows tcl xilinx
1个回答
1
投票

这是众所周知的,这是因为如果我们更准确地同步,那么从Tcl对环境变量的所有访问都会有更大的性能损失,这是一个比你改变环境的更常见的用例。来自C代码的变量。 (putenv()系统调用没有给我们任何可以有效钩住来检测变化的东西,所以我们最终必须从头开始重新组装整个env数组;这被发现是一个重要的瓶颈。)

最简单的解决方法是让你在Tcl中创建一个额外的命令(但是用C语言编写)直接包装getenv()调用,这样你就可以使用你怀疑可能在Tcl后面改变的环境变量。

int WrapGetEnv(ClientData ignored, Tcl_Interp *interp, int argc, char *argv[]) {
    if (argc != 2) {
        // Probably ought to be a better error here
        return TCL_ERROR;
    }
    char *var = argv[1];
    char *val = getenv(var);
    if (val != NULL) {
        Tcl_SetResult(interp, val, TCL_DYNAMIC);
    }
    return TCL_OK;
}

// ... in the right place do this ...
Tcl_CreateCommand(interp, "getenv", WrapGetEnv, NULL, NULL);
© www.soinside.com 2019 - 2024. All rights reserved.