第4章 Linux环境(环境变量)

China☆狼群 提交于 2019-12-06 02:32:05

环境变量简述

UNIX规范为各种应用定义了许多标准环境变量,包括终端类型、默认的编辑器、时区等。C语言程序可以通过putenv和getenv函数来访问环境变量

#include <stdlib.h>
char *getenv(const char *name);
int putenv(const char *string);

环境由一组格式为"名字=值"的字符串组成.getenv函数以给定的名字搜索环境中的一个字符串,并返回与该名字相关的值。如果请求的变量不存在,它就返回null。如果变量存在但无关联值,它将运行成功并返回一个空字符串,即该字符串的第一个字节是null。由于getenv返回的字符串是存储在getenv提供的静态空间中,所以如果想进一步使用它,你就必须将它复制到另一个字符串中,以免它被后续的getenv所覆盖

putenv函数以一个格式为"名字=值"的字符串作为参数,并将该字符串加到当前环境中。如果由于可用内存不足而不能扩展环境,它会失败并返回-1.此时错误变量errno将被设置为ENOMEM

getenv和setenv

紧接在main函数声明后的几行代码用于确保程序environ.c被正确调用,它只带有一个或两个参数:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main(int argc,char *argv[])
{
    char *var, *value;
    if(argc == 1 || argc > 3){
        fprintf(stderr,"usage:environ var [value]\n");
        exit(1);
    }
    var = argv[1];
    value = getenv(var);
    if(value)
        printf("Variable %s has value %s\n",var ,value);
     else
        printf("Variable %s has not value\n",var);
    if(argc == 3){
        char *string;
        value = argv[2];
        string = malloc(strlen(var)+strlen(value)+2);
        if(!string){
            fprintf(stderr,"out of memory\n");
            exit(1);
        }
        strcpy(string,var);
        strcat(string," =");
        strcat(string,value);
        printf("Calling putenv with:%s\n",string);
        if(putenv(string) !=0){
            fprintf(stderr," putenv failed\n");
            free(string);
            exit(1);
        }
    value = getenv(var);
    if(value)
        printf("New value of %s is%s\n",var,value);
    else
        printf("New value of %s is null??\n",var);
    }
    exit(0);
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!