在 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. 获取环境变量名和值
getenv 和 environ 结合使用:
- 可以遍历所有环境变量,获取每个变量的名称和值。
示例代码:获取和设置环境变量
#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。 - 设置环境变量:
putenv和setenv。 - 删除环境变量:
unsetenv。 - 获取所有环境变量:通过
environ。
这些函数和全局变量使你能够灵活地操作进程的环境变量。在 Linux 环境中,它们通常用于控制程序的行为,特别是涉及路径、配置文件位置和其他系统设置时。