进程的环境列表

进程的环境列表

  • 每一个进程都有与其相关的称之为环境列表(environment list)的字符串数组,或简称为环境(environment)。其中每个字符串都以名称=值(name=value)形式定义。因此,环境是“名称-值”的成对集合,可存储任何信息。常将列表中的名称称为环境变量(environment variables)。

  • 新进程在创建之时,会继承其父进程的环境副本。这是一种原始的进程间通信方式,却颇为常用。环境(environment)提供了将信息从父进程传递给子进程的方法。由于子进程只
    有在创建时才能获得其父进程的环境副本,所以这一信息传递是单向的、一次性的。子进程创建后,父、子进程均可更改各自的环境变量,且这些变更对对方而言不再可见。

  • 环境变量的常见用途之一是在 shell 中。通过在自身环境中放置变量值,shell 就可确保把这些值传递给其所创建的进程,并以此来执行用户命令。例如,环境变量 SHELL 被设置为shell程序本身的路径名,如果程序需要执行 shell 时,大多会将此变量视为需要执行的 shell 名称。

从程序中访问环境

在 C 语言程序中,可以使用全局变量 char **environ 访问环境列表。(C 运行时启动代码定义了该变量并以环境列表位置为其赋值。)environ 与 argv 参数类似,指向一个以 NULL 结尾的指针列表,每个指针又指向一个以空字节终止的字符串。
在这里插入图片描述

修改环境接口

定义函数

char * getenv(const char *name);
函数说明:getenv()用来取得参数name环境变量的内容。参数name为环境变量的名称,如果该变量存在则会返回指向该内容的指针。环境变量的格式为name=value。

#include<stdlib.h>
#include<stdio.h>
int main()
{
	char *p;
	if(p = getenv("USER"));
        printf("USER = %s\n", p);
    return 0;
}

执行:USER = luxun

定义函数

int putenv(const char * string);
函数说明: putenv()用来改变或增加环境变量的内容。参数string的格式为name=value,如果该环境变量原先存在,则变量内容会依参数string改变,否则此参数内容会成为新的环境变量。
返回值:执行成功则返回0,有错误发生则返回-1。

#include<stdlib.h>
#include<stdio.h>
int main()
{
	char *p;
	if(p = getenv("USER"));
        printf("USER = %s\n", p);
    putenv("USER=ADMIN");
    printf("USER = %s\n", getenv("USER"));
    return 0;
}

执行:USER = luxun
USER = ADMIN

定义函数

int setenv(const char *name,const char * value,int overwrite);
函数说明:setenv()用来改变或增加环境变量的内容。参数name为环境变量名称字符串。
参数:value则为变量内容,参数overwrite用来决定是否要改变已存在的环境变量。如果overwrite不为0,而该环境变量原已有内容,则原内容 会被改为参数value所指的变量内容。如果overwrite为0,且该环境变量已有内容,则参数value会被忽略。
返回值:执行成功则返回0,有错误发生时返回-1。

#include<stdlib.h>
#include<stdio.h>
int main()
{
	char *p;
	if(p = getenv("USER"));
        printf("USER = %s\n", p);
    setenv("USER","ADMIN",5);
    printf("USER = %s\n", getenv("USER"));
    return 0;
}

执行:USER = luxun
USER = ADMIN

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值