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

简介: Linux系统编程(环境变量编程)

前言

本篇文章我们来讲解环境变量编程,环境变量在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语言编程中非常常用,可以方便地读取、设置和删除环境变量的值。通过使用这些函数,可以在程序中灵活地操作环境变量,实现程序的配置和自定义。

总结

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


相关文章
|
1天前
|
Unix Linux Windows
Linux 系统目录结构
这篇文章详细解释了Linux系统目录结构,重点介绍了/etc目录存放系统配置文件,/root为管理员主目录,/usr存放应用程序和共享资源,/var存放日志等变动文件,以及/home、/boot等目录的作用。
Linux 系统目录结构
|
2天前
|
Linux 程序员 开发者
源社区的兴起:从“代码隐士”到Linux引领的“全球编程嘉年华”
在编程的古老森林中,曾有“代码隐士”默默耕耘,惧怕智慧外泄。直到“开源”春风拂过,源社区如全球编程嘉年华盛开!开源文化颠覆了“独门秘籍”的传统,像“武林秘籍共享”般在网络上公开,鼓励知识传播与智慧碰撞。程序员组队开发,分享代码,提升科技实力。Linux则从“首席大厨”变身为“总导演”,以强大内核调制出诱人应用,引领潮流并推动技术创新。加入这场没有血腥厮杀,只有知识盛宴的“编程版《饥饿游戏》”吧!与全球开发者共享编程的乐趣与成就感!别忘了带上你的“独门秘籍”,可能下一个改变世界的创意就在其中!
18 7
|
1天前
|
Linux Shell
Linux系统
是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置Shell命令和Linux命令。
|
1天前
|
Ubuntu Java Linux
查看Linux系统中日志文件
查看Linux系统中日志文件
|
1天前
|
Linux
Linux源码阅读笔记17-资源分配及总线系统
Linux源码阅读笔记17-资源分配及总线系统
|
2天前
|
Linux Shell
Linux系统
是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置Shell命令和Linux命令。
|
1天前
|
关系型数据库 MySQL Linux
一文教会你如何在Linux系统中使用Docker安装Mysql 5.7版本 【详细过程+图解】
这篇文章提供了在Linux系统中使用Docker安装Mysql 5.7版本的详细过程和图解,包括安装指定版本、创建实例、启动、使用Navicat连接测试、文件挂载与端口映射、进入容器、配置文件修改以及重新启动容器等步骤。
一文教会你如何在Linux系统中使用Docker安装Mysql 5.7版本 【详细过程+图解】
|
1天前
|
运维 监控 Linux
"熬夜达人揭秘:Linux系统崩溃前夜,如何用这几行代码救局?监控与排查全攻略!"
【8月更文挑战第19天】作为常需熬夜的系统管理员,面对Linux系统问题时,我总结了一套实用的监控与排查方法。通过使用`top`监控CPU使用率、`free`检查内存状况、`iostat`监测磁盘I/O、及`iftop`观察网络流量,结合`ps`、`pmap`和`strace`等工具深入分析,可有效识别并解决系统瓶颈,减少故障处理时间,保障系统稳定运行。
|
1天前
|
存储 安全 Linux
Linux存储安全:系统更新和补丁管理的策略与实践
【8月更文挑战第19天】安全是一个持续的过程,需要不断地评估、更新和改进策略。
4 0
|
1天前
|
NoSQL 数据可视化 Linux
一文教会你如何在Linux系统中使用Docker安装Redis 、以及如何使用可视化工具连接【详细过程+图解】
这篇文章详细介绍了如何在Linux系统中使用Docker安装Redis,并提供了使用可视化工具连接Redis的步骤。内容包括安装Redis镜像、创建外部配置文件、映射文件和端口、启动和测试Redis实例、配置数据持久化存储,以及使用可视化工具连接和操作Redis数据库的过程。