代码之家  ›  专栏  ›  技术社区  ›  porton

环境在Windows上可用吗?

  •  1
  • porton  · 技术社区  · 6 年前

    environ 在主要的WindowsC编译器中是否有可用的变量(从POSIX开始)(至少用于读取)?

    我知道 execve 在Windows上可用: https://en.wikipedia.org/wiki/Exec_(system_call)

    但我不确定 环境 也有。

    3 回复  |  直到 6 年前
        1
  •  2
  •   Gem Taylor    6 年前

    environ应该是可用的,但不推荐使用,您应该使用更安全的方法。

    这个 execXX() 有电话,但是 fork() 不是的,所以实际上,exec函数被认为是无用的。

    你可以使用 CreateProcessA 具有类似的效果,并能清晰地设置环境和管道。

    只需承认@eryksun的顾虑:在使用任何Microsoft“A”文件(和其他O/S)API之前,您需要考虑正在使用的字符集。如果您可以使用16位Unicode完成所有代码,这是最简单的,因为它是NT、Windows7、Windows10的基础类型。在UNIX和Mac上,您可以假设UTF-8是8位字符集的选择,但对于Windows来说,这还没有发生,当然还有“向后兼容性”。如果您正在使用 任何 对于“类Unix”M/S API,您应该已经做出了相同的设计决策,所以应该已经有了答案。

        2
  •  2
  •   Weather Vane    6 年前

    以下程序将打印环境变量。

    #include <stdio.h>
    
    int main(int argc, char *argv[], char *env[]){
        int e = 0;
        while (env[e] != NULL) {
            printf("%s\n", env[e++]);
        }
    }
    
        3
  •  2
  •   Govind Parmar    6 年前

    编辑:我错了;看起来MSVC运行库不包括对 environ (尽管已弃用)毕竟。如果有人对替代方法感兴趣,我将在下面留下我以前的答案。


    我不知道,但是,如果您想访问Windows上的环境变量,您有一些选项:

    1. 申报 main wmain 签字如下:

      int (w)main(int argc, char/wchar_t *argv[], char/wchar_t *envp[])
      

      这在C标准中定义为指向环境块的指针,如果适用:

      专利文献J.5.1 :

      在宿主环境中,主函数接收第三个参数char*envp[], 指向以空结尾的指向char的指针数组,每个指针指向一个字符串 为程序的执行提供有关环境的信息。 (5.1.2.2.1)。

    2. 使用Windows API函数 GetEnvironmentVariable(A|W) 获取单个环境变量,或 GetEnvironmentStrings 以获取整个环境数组。

    3. 标准C函数 getenv .