Linux系统编程(环境变量编程)

举报
yd_274589494 发表于 2023/07/29 12:23:23 2023/07/29
【摘要】 @TOC 前言本篇文章我们来讲解环境变量编程,环境变量在Linux中可以说是非常重要的,那么这篇文章将会带大家来学习环境变量的编程。 一、环境变量表在Linux系统中,环境变量是一种特殊的变量,用于存储操作系统或用户定义的信息,可以在系统运行过程中被各种程序和脚本访问和使用。环境变量表是一个存储环境变量的数据结构,Linux系统将它作为一个数组进行管理。环境变量表是由操作系统在程序执行之前设...

@TOC


前言

本篇文章我们来讲解环境变量编程,环境变量在Linux中可以说是非常重要的,那么这篇文章将会带大家来学习环境变量的编程。

一、环境变量表

在Linux系统中,环境变量是一种特殊的变量,用于存储操作系统或用户定义的信息,可以在系统运行过程中被各种程序和脚本访问和使用。环境变量表是一个存储环境变量的数据结构,Linux系统将它作为一个数组进行管理。

环境变量表是由操作系统在程序执行之前设置和维护的。当一个新的进程被创建时,它会继承其父进程的环境变量表。环境变量表中的每个变量都由一个键值对表示,其中键是变量名,值是变量的内容。

在Linux系统中,可以使用一些命令和函数来访问和操作环境变量表,例如:

printenv 命令:用于显示当前环境变量表中所有的环境变量及其值。
export 命令:用于设置和修改环境变量的值。
getenv 函数:在编程中使用,用于获取指定环境变量的值。
setenv 函数:在编程中使用,用于设置或修改环境变量的值。
unset 命令:用于删除指定的环境变量。

环境变量表在Linux系统中具有广泛的应用。一些常见的环境变量包括:

PATH:用于指定可执行程序的搜索路径。
HOME:当前用户的家目录路径。
USER:当前登录用户的用户名。
LANG:用于设置程序的本地化语言环境。
LD_LIBRARY_PATH:用于指定共享库的搜索路径。

通过使用环境变量,可以为程序提供配置信息、设置系统行为以及定义一些常用的路径和参数等。在编写脚本或开发应用程序时,理解和正确使用环境变量可以提高程序的可配置性和灵活性。

编写代码打印环境变量表:

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

int main(int argc, char** argv, char** envp)
{
    int i = 0;
    extern char** environ;

    while(environ[i])
    {
        printf("%s\n", environ[i]);
        i++;
    }

    return 0;
}

运行结果:

在这里插入图片描述

二、环境变量读写接口

在Linux系统中,可以使用一些函数来读取和写入环境变量的值。下面是一些常用的环境变量读写接口函数的讲解:

getenv(const char *name)

这个函数用于获取指定环境变量的值。它接受一个字符串参数name,表示要获取的环境变量的名称,并返回该环境变量的值作为字符串。如果指定的环境变量不存在,则返回NULL。

示例代码:

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

int main() {
    char *path = getenv("PATH");
    if (path != NULL) {
        printf("PATH: %s\n", path);
    } else {
        printf("PATH environment variable not found.\n");
    }

    return 0;
}

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

这个函数用于设置或修改环境变量的值。它接受三个参数,name表示要设置或修改的环境变量的名称,value表示要设置的值,overwrite表示是否覆盖已存在的环境变量,如果overwrite为非零值,则会覆盖已存在的环境变量,如果为零,则不会进行覆盖。

示例代码:

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

int main() {
    // 设置环境变量
    setenv("MY_VAR", "Hello world!", 1);

    // 获取环境变量并打印
    char *myVar = getenv("MY_VAR");
    if (myVar != NULL) {
        printf("MY_VAR: %s\n", myVar);
    } else {
        printf("MY_VAR environment variable not found.\n");
    }

    return 0;
}

unsetenv(const char *name)

这个函数用于删除指定的环境变量。它接受一个字符串参数name,表示要删除的环境变量的名称。如果指定的环境变量存在,则将其从环境变量表中删除;如果不存在,则不会产生任何效果。

示例代码:

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

int main() {
    // 删除环境变量
    unsetenv("MY_VAR");

    // 获取环境变量并打印
    char *myVar = getenv("MY_VAR");
    if (myVar != NULL) {
        printf("MY_VAR: %s\n", myVar);
    } else {
        printf("MY_VAR environment variable not found.\n");
    }

    return 0;
}

int putenv(char *string);

string 是一个指向以 “name=value” 格式表示的字符串的指针。该字符串指定了要设置的环境变量的名称和值。
函数的工作原理如下:

如果传递给 putenv 的字符串包含 “name=value” 类似的格式,它将尝试将此字符串添加到环境变量中。如果指定的环境变量名称已经存在,那么该环境变量的值将被更新为新的值。

如果传递给 putenv 的字符串为空或无效,或者在设置环境变量时出现了错误,该函数将返回一个非零值来指示失败。

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

int main() {
    char* env_var = "MYVAR=Hello";  // 设置环境变量 MYVAR
    int result = putenv(env_var);
    if (result != 0) {
        printf("Failed to set environment variable!\n");
        return 1;
    }
    
    char* value = getenv("MYVAR");  // 获取环境变量 MYVAR 的值
    if (value != NULL) {
        printf("MYVAR: %s\n", value);
    }
    
    return 0;
}

在上面的示例中,putenv 函数被用来设置一个名为 “MYVAR” 的环境变量,并将其值设置为 “Hello”。然后,使用 getenv 函数获取并打印了环境变量 “MYVAR” 的值。

需要注意的是,使用 putenv 函数设置的环境变量的内存由系统管理。如果在环境变量的值发生更改后尝试访问该变量,应注意确保不会访问到悬空的指针或已被释放的内存。如果需要更灵活地管理环境变量,可以考虑使用 setenv 和 unsetenv 函数来代替 putenv 函数。

这些函数在C语言编程中非常常用,可以方便地读取、设置和删除环境变量的值。通过使用这些函数,可以在程序中灵活地操作环境变量,实现程序的配置和自定义。

总结

本篇文章就讲解到这里,环境变量对于进程来说是非常重要的一个部分。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。