目录
二、文件输入重定向
三、管道
四、信号
一、使用C程序访问环境变量
系统提供一个全局变量,extern char **environ; 内部存放结构如下
1、使用全局变量environ打印系统所有环境变量:
extern char **environ; int i=0; while(*(environ+i)!=NULL){ printf("%s ",*(environ+i)); i++; }
2、使用main(int argc,char *argv,char *envp[])
#include<stdio.h> int main(int argc,char *argv[],char *envp[]){ int i=0; for(;envp[i]!=NULL;i++){ printf("%s ",envp[i]); } return 0; }
3、通过函数操作环境变量
getenv(3)
#include<stdlib.h>
char *getenv(const char *name)
功能:
获取环境变量的值
参数:
name:环境变量的名字
返回值:
没有找到匹配的环境变量:NULL
成功:环境变量值的首地址
printf("%s ",getenv(UID));
putenv(3)
#include<stdlib.h>
int putenv(const char *name)
功能:
改变或增加一个环境变量
参数:
string:name=value格式的字符串
返回值:
错误:非0
成功:0
piutenv("name=pycoming")' printf("name:%s ",getenv(name));
name变量只是在此进程中被设置,此进程结束后,无法再查看。
clearenv(3)
#include<stdlib.h>
int clearenv(void)
功能:
清除环境变量
参数:
void
返回值:
错误:非0
成功:0
例略。
setenv(3)
#include<stdlib.h>
int setenv(const char *name,const char*value,int overwrite)
功能:
改变或增加一个环境变量
参数:
name:环境变量的名字
value:指定改变环境变量的值
overwrite:
0:环境变量的值存在,那么值被改变
非0:环境变量的值存在,不被改变
返回值:
错误:-1,errno被设置
成功:0
int unsetenv(const char *name,const char*value,int overwrite)
功能:
改变或增加一个环境变量
参数:
name:环境变量的名字
value:指定改变环境变量的值
overwrite:
0:环境变量的值存在,那么值不被改变
非0:环境变量的值存在,被改变
返回值:
错误:-1,errno被设置
成功:0
带环境变量加载程序:
#include<stdio.h> #include<unistd.h> int main(void){ char *const ps_env[]={"name=tarena",NULL}; execle("./myenv","myenv",NULL,ps_env);//myenv为打印当前进程环境变量的可执行程序 return 0; }
如果不加ps_env,那么子进程就继承父进程的环境变量