Linux 环境变量

334 阅读3分钟

在 Linux 系统上,C 和 C++ 提供了一些与环境变量相关的函数接口,用于获取、设置、修改和删除环境变量。以下是常用的环境变量相关函数:

1. 获取环境变量

getenv

  • 函数原型
    char *getenv(const char *name);
    
  • 功能:获取指定名称的环境变量的值。如果环境变量存在,返回该环境变量的值(一个字符串);如果环境变量不存在,返回 NULL
  • 示例
    const char *value = getenv("HOME");
    if (value != NULL) {
        printf("HOME=%s\n", value);
    } else {
        printf("HOME not found\n");
    }
    

2. 设置/修改环境变量

putenv

  • 函数原型
    int putenv(char *string);
    
  • 功能:设置或修改环境变量。传入的字符串应该是一个 "VAR_NAME=value" 格式的字符串,且该字符串必须是可修改的(不能是 const)。
  • 返回值:如果成功,返回 0;如果失败,返回 -1 并设置 errno
  • 示例
    char *new_var = "MY_VAR=123";
    if (putenv(new_var) == 0) {
        printf("Environment variable set successfully\n");
    } else {
        perror("putenv");
    }
    

setenv

  • 函数原型
    int setenv(const char *name, const char *value, int overwrite);
    
  • 功能:设置环境变量。与 putenv 类似,但它会创建一个新的环境变量或更新现有的环境变量。overwrite 参数控制是否覆盖已存在的环境变量。
    • overwrite = 0:如果环境变量已存在,则不修改其值。
    • overwrite = 1:如果环境变量已存在,修改其值。
  • 返回值:如果成功,返回 0;如果失败,返回 -1 并设置 errno
  • 示例
    if (setenv("MY_VAR", "456", 1) == 0) {
        printf("Environment variable set successfully\n");
    } else {
        perror("setenv");
    }
    

3. 删除环境变量

unsetenv

  • 函数原型
    int unsetenv(const char *name);
    
  • 功能:删除指定的环境变量。如果环境变量存在,删除它;如果不存在,则不执行任何操作。
  • 返回值:如果成功,返回 0;如果失败,返回 -1 并设置 errno
  • 示例
    if (unsetenv("MY_VAR") == 0) {
        printf("Environment variable deleted\n");
    } else {
        perror("unsetenv");
    }
    

4. 获取所有环境变量

environ(全局变量)

  • 功能environ 是一个指向所有环境变量的指针数组。每个元素是一个指向环境变量名和值的字符串的指针,格式为 "VAR_NAME=value"。它是一个外部变量,位于 <unistd.h><stdlib.h> 中。
  • 示例
    extern char **environ;
    for (char **env = environ; *env != NULL; ++env) {
        printf("%s\n", *env);
    }
    

5. 获取环境变量名和值

getenvenviron 结合使用:

  • 可以遍历所有环境变量,获取每个变量的名称和值。

示例代码:获取和设置环境变量

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

int main() {
    // 获取环境变量
    const char *home = getenv("HOME");
    if (home != NULL) {
        printf("HOME: %s\n", home);
    } else {
        printf("HOME not set\n");
    }

    // 设置环境变量
    if (setenv("MY_VAR", "12345", 1) == 0) {
        printf("MY_VAR set to: %s\n", getenv("MY_VAR"));
    }

    // 删除环境变量
    if (unsetenv("MY_VAR") == 0) {
        printf("MY_VAR deleted\n");
    }

    return 0;
}

总结:

  • 获取环境变量getenv
  • 设置环境变量putenvsetenv
  • 删除环境变量unsetenv
  • 获取所有环境变量:通过 environ

这些函数和全局变量使你能够灵活地操作进程的环境变量。在 Linux 环境中,它们通常用于控制程序的行为,特别是涉及路径、配置文件位置和其他系统设置时。