📜  C程序来打印环境变量(1)

📅  最后修改于: 2023-12-03 15:14:26.354000             🧑  作者: Mango

打印环境变量

在Linux系统中,所有的进程都有一组环境变量,这些变量存放在一个字符串数组中。这个字符串数组以envp参数的形式传递给main函数。在C语言中,可以通过getenv()函数和putenv()函数来访问和修改环境变量。

展示环境变量

下面是一个简单的C程序,用于打印所有的环境变量。

#include <stdio.h>
#include <stdlib.h>

extern char** environ;

int main(int argc, char *argv[], char *envp[]) {
    char **env;
    for (env = environ; *env != NULL; env++) {
        printf("%s\n", *env);
    }
    return 0;
}

在这个程序中,我们使用了environ全局变量来获取所有的环境变量。注意,environ属于libc库中的一个全局变量,不是C的标准函数库中的一部分,因此我们需要在程序中引入它。另外,在使用environ时,我们需要将其声明为char **类型的指针。

运行程序

运行上面的程序,我们可以看到系统中所有的环境变量:

$ ./printenv
LANG=en_US.UTF-8
SHELL=/bin/bash
TERM=xterm-256color
...
获取单个环境变量

除了打印所有的环境变量外,我们还可以使用getenv()函数来获取单个环境变量的值。

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[], char *envp[]) {
    char *path = getenv("PATH");
    printf("PATH=%s\n", path);
    return 0;
}

在这个程序中,我们使用了getenv("PATH")来获取环境变量PATH的值,并将其打印出来。

修改环境变量

最后,我们还可以使用putenv()函数来修改环境变量的值。

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[], char *envp[]) {
    char *path = getenv("PATH");
    printf("old PATH=%s\n", path);
    
    putenv("PATH=/usr/local/bin:/usr/bin:/bin");
    
    path = getenv("PATH");
    printf("new PATH=%s\n", path);
    
    return 0;
}

在这个程序中,我们首先获取了环境变量PATH的值,并将其打印出来。然后我们调用了putenv("PATH=/usr/local/bin:/usr/bin:/bin")来修改PATH的值。最后,我们再次获取环境变量PATH的值,并将其打印出来,以确保修改已经成功。

注意,putenv()函数修改的是指向环境变量字符串的指针,而不是实际的字符串内容。因此,在调用putenv()函数时要非常小心,以免出现指针问题。

总结

通过这篇文章,我们学习了如何在C程序中打印系统环境变量、获取单个环境变量的值以及修改环境变量的值。这些功能是编写能够与系统进行交互的程序时必不可少的。除了上述函数外,C语言中还有大量的系统库函数可以用于操作文件、网络、进程等系统资源。