现在的位置: 首页 > 综合 > 正文

初识Linux环境变量

2013年08月06日 ⁄ 综合 ⁄ 共 1138字 ⁄ 字号 评论关闭

      Linux是一个多用户的操作系统,用户登入系统后,都会有一个专用的运行环境,这个默认环境实际上就是一组环境变量的定义。用户可以定制自己的运行环境,修改相应的系统环境变量。

      常见的环境变量有:

      HOSTNAME指主机的名称。

      LANG指和语言相关的环境变量。

      应用程序常常增加一些环境变量,例如使用JAVA就要设置JAVA_HOME和CLASSPATH等,输入法增加环境变量XMODIFIERS=@im=fcitx等。

      在Shell中常用的环境变量命令:

1. 显示环境变量HOME

    $echo $HOME

2. 设置一个新的环境变量 WELCOME

    $export WELCOME="Hello!"

3. 使用env显示所有的环境变量

    $env

4. 使用set命令显示所有本地定义的shell变量

    $set

5. 用unset命令清除环境变量

    $unset

6. 使用readonly命令设置只读环境变量

    $readonly TEST

 

     在应用程序中,可以使用C函数getenv,setenv,unsetenv来设置环境变量。

     举个例子,说明父进程与子进程之间环境变量的传递。

     在父进程中,通过setenv设置http_proxy环境变量值,然后调用wget程序去拿文件。wget这个子进程通过getenv得到环境变量,根据此设置去下载文件。

    在父进程中,执行一个子进程函数如下:

static int execve_program(char **argv,int isWait)
{
    pid_t pid, childpid;
    int status, istatus;   

    printf("execve_program:%s %s start/n",argv[0],argv[1]);
    pid = vfork ();
    if (pid == 0)
    {            // we are the child
        execvp (argv[0], argv);
        _exit (1);
    }
    else if(isWait)
    {
        childpid = wait (&status);       
        istatus=WEXITSTATUS(status);
    }
    printf("execve_program:%s %s end/n",argv[0],argv[1]);
    return istatus;
}
    实践证明,使用execvp函数,可以将环境变量传递给子进程。当时试过execve函数,不太清楚如何设置最后一个参数,最后一个参数若为NULL,子进程通过getenv不能得到主进程设置的环境变量。

抱歉!评论已关闭.