Linux环境变量

1.   环境变量

 

     环境变量用于描述该用户操作环境下特定意义的变量,可以用env命令查看该用户下生效的环境变量。 和命令行参数argv类似,环境变量表也是一组字符串,如下图12-8所示

 

 

     

          图12-8 环境变量图

    libc库中定义的全局变量environ指向环境变量表,由于environ变量没有包含在任何头文件中,所以在使用时要用extern声明。

    按照惯例,环境变量字符串都是name=value这样的形式保存在内存中。大多数name由大写字母加下画线组成,一般把name部分叫做环境变量名,value部分则是环境变量的值,而且value需要以'/0'结尾,环境变量定义了该进程的运行环境。

2.  打印环境变量

下面是打印环境变量的程序范例。

environ.c源代码如下:

#include <stdio.h>

int main(void)

{

    extern char **environ;

    int i;

    for(i=0; environ[i]!=NULL; i++)

        printf("%s/n", environ[i]);

    return 0;

}

编译 gcc environ.c –o environ。

执行./environ,执行结果如下:

HOME=/home/zjkf

LANGUAGE=zh_CN:zh:en_US:en

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

......

   在命令行执行时,Shell进程是执行进程的父进程。由于父进程在调用fork创建子进程后再调用exec函数执行environ程序,Shell进程会把自身的环境变量表复制给子进程,所以./environ打印的环境变量和Shell进程的环境变量是相同的。

 

 

3.   环境变量函数

(1) 环境变量函数

    环境变量的使用会用到getenvsetenvunsetenv这三个函数,这三个函数的原型及说明如下。

 

 

getenv(得到环境变量) 

 

所需头文件

#include <stdlib.h>

函数说明

getenv()用来取得参数name环境变量的内容。参数name为环境变量的名称,如果该变量存在则会返回指向该内容的指针

函数原型

char * getenv(const char *name)

函数返回值

成功:返回指向该内容的指针

出错:NULL

 

 

 setenv(改变或增加环境变量)

 

所需头文件

#include <stdlib.h>

函数说明

setenv()用来改变或增加环境变量的内容。参数name为环境变量名称字符串

函数原型

int setenv(const char *name,const char * value,int overwrite)

函数传入值

name:环境变量名称

value:环境变量的值

overwrite

Ÿ  0表示该环境变量存在时,value则忽略

Ÿ  0表示该环境变量存在时,原内容会被改为参数value所指的变量内容

函数返回值

成功:返回指向该内容的指针

出错:-1,错误原因存于errno

错误代码

ENOMEM:内存不足,无法配置新的环境变量空间

 

 unsetenv(删除环境变量)

所需头文件

#include <stdlib.h>

函数说明

unsetenv()用来删除环境变量

函数原型

void unsetenv(const char *name)

函数传入值

name:环境变量名称

 

 

   

2)环境变量函数使用示例

getenv.c源代码如下:

#include <stdio.h>

#include <stdlib.h>

int main()

{

    char * p;

    if((p=getenv("USER")))

        printf("USER =%s/n",p);

    setenv("USER","test",1);

    printf("USER=%s/n",getenv("USER"));

    unsetenv("USER");

    printf("USER=%s/n",getenv("USER"));

 

    return 0 ;

}

编译 gcc getenv.c -o getenv

执行./getenv,执行结果如下:

USER =zjkf

USER=test

USER=(null)

 

3)环境变量经常使用的场合

环境变量常使用得到一个文件的全路径名的场合。使用时需先在用户的.profile中设置FILEDIR=$HOME/print/;export FILEDIR。然后在程序中使用sprintf(file_full_name ,"%s%s",getenv("FILEDIR") ,filename )语句就可以得到文件的全路径名称,其中filename是文件名,file_full_name用来存放文件的全路径名称。

 

 

摘录自《深入浅出Linux工具与编程》

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值