Linux C中environ 变量是一个char** 类型,存储着系统的环境变量。
/*default environment variable defined in system-level*/
char **environ;
这个变量是声明在文件unistd.h头文件中。可以通过#include <unistd.h>引入该变量,或者是使用extern char **environ;
#include <unistd.h>
#include <stdio.h>
int main()
{
int i = 0;
while(environ[i] != NULL){
i++;
printf("%s \n",environ[i]);
}
return 0;
}
编译,并运行后结果
root@kali:/home/RicardoWork/codeTest/Test_environ# gcc test-environ.cpp -o test
root@kali:/home/RicardoWork/codeTest/Test_environ# ./test
XDG_MENU_PREFIX=gnome-
LANG=en_US.UTF-8
GDM_LANG=en_US.UTF-8
DISPLAY=:1
COLORTERM=truecolor
USERNAME=root
XDG_VTNR=2
SSH_AUTH_SOCK=/run/user/0/keyring/ssh
S_COLORS=auto
XDG_SESSION_ID=2
当然对于双重指针的访问,还可以通过其他方式,例如:
#include <unistd.h>
#include <stdio.h>
int main()
{
while(*environ){
environ++;
printf("%s \n",*environ);
}
return 0;
}
知识点:environ参数,该参数用于存储程序的环境列表。此区域可存储的字节数有上限要求,SUSv3规定使用ARG_MAX常量(定义于<limits.h>)或者调用sysconf(_SC_ARG_MAX)函数以确定该上限值(将在11.2节描述sysconf()函数),并且SUSv3还要求ARG_MAX常量的下限为_POSIX_ARG_MAX(4096)个字节,而大多数UNIX实现的限制都远高于此。但SUSv3并未规定对ARG_MAX限制的实现中是否要将一些开销字节计算在内(比如终止空字符、字节对齐、argv和environ指针数组)
所以如果要保存一个环境变量,可以先申请一块内存,这个内存的大小应该为
sysconf(_SC_ARG_MAX) * sizeof(char *)