首页 > 系统相关 >Linux环境变量与进程环境列表

Linux环境变量与进程环境列表

时间:2024-05-02 23:33:05浏览次数:24  
标签:shell int 环境 列表 char Linux 环境变量

作者:jackson
更新时间:20240502

一、概述

每个进程都有一份环境列表,即在用户空间内存维护的一组环境变量。

  • 调用 fork() 创建的新进程,会继承父进程的环境副本,这也为父子进程间通信提供了一种机制。
  • 调用 exec() 替换当前正在运行的程序时,新程序要么继承老程序的环境,要么在 exec() 调用的参数中指定新环境并加以接收。

环境变量最常用的用途之一是在 shell 程序中。通过自身环境中放置变量值,将环境变量传递给其创建的进程。
大多数 shell 使用 export 命令向环境中添加变量值。

SHELL=/bin/bash
# 上述命令仅仅是创建变量
export SHELL
# Pur variable into shell process's environment
# 在 Bourne shell 及其衍生 shell (bash Korn) 可使用下列语法仅向执行的程序添加一个变量而不改变父 shell
NMAE=jackson program
# 可以在 program 前放置多对

二、在 shell 中访问

printenv 命令会打印当前进程的环境列表。
通过 Linux 专有的 /proc/PID/environ 文件可以检查任一进程的环境列表。

三、在程序中访问

读取环境变量

  1. 在 C 语言程序中,可以使用全局变量 cahr **environ 访问。C 运行启动代码定义了该变量并以环境列表为其赋值。
  2. main() 函数声明中定义第三个参数来访问环境列表。该参数的作用域仅在 main()函数内,除了该局限性,该特性也不在 SUSv3 中。
int main(int argc, char *argv[], char* envp[])
{
	return 0;
}
  1. 使用库 API cahr* getenv(const char* name);
    • 不要修改 getenv() 返回的字符串,这是因为大多数实现,该字符串实际上是环境的一部分,即与环境由相同的地址。

添加环境变量

include <stdlib.h>
int putenv(cahr *string);
// Returns 0 on success, or nonzero on error

string 是 name=value 形式的字符串。
注意调用该字符串后,该字符串就成为了环境的一部分,简而言之,环境中保存的并不是该 string 的副本,而就是其本身。此后不应修改该 stirng 所在内存区域。

修改环境变量

int setenv(const char* name, const char* value, int overwrite);
// Returns 0 on success, or -1 on error

setenv() 复制其参数到环境中,与 putenv 恰恰相反。

删除环境变量

int unsetenv(const char* name);
int clearenv(void);

// 也可以通过将 environ 变量赋值为 NULL 来达到清除的目的。

标签:shell,int,环境,列表,char,Linux,环境变量
From: https://www.cnblogs.com/jw-jackson/p/18170757

相关文章

  • Linux进程
    程序与进程程序:是可执行文件,其本质是是一个文件,程序是静态的,同一个程序可以运行多次,产生多个进程进程:它是程序的一次运行过程,当应用程序被加载到内存中运行之后它就称为了一个进程,进程是动态的,进程的生命周期是从程序运行到程序退出父子进程:当一个进程A通过frok()函数创建出进......
  • Linux bash常用命令案例记录
    scp(iftheprivatekeyisid_rsa,[-i]canberemoved)scp-ikey-Pportlocalfileuser@ip:pathbacktothebeginningoflineCtrl+agototheendoflineCtrl+ecutcharacterfromcurrentpositiontothebeginningCtrl+ucutchara......
  • c#胖东来小程序自动购物程序(接单,windows桌面程序、linux程序、网络应用等等)
    一、程序效果自动打开胖东来小程序,自动购物 二、实现先截屏,然后利用opencv库识别下一步按键所在位置,然后使用mouse_event控制鼠标,模拟人的动作第一步,截取屏幕staticBitmapCaptureScreen(){intscreenWidth=Screen.PrimaryScreen.Bounds.Width;intscreenHe......
  • Linux音频(3):alsa-lib以及alsa-utils
    alsa-lib是为了简化、便利用户空间对ALSA驱动框架声卡编程的开源库。alsa-utils是alsa的一个工具包,里面包含有声卡测试和音频编辑的工具.1alsa-libalsa-lib在Buildroot中配置如下,包含一系列库插件:Targetpackages->Libraries->Audio/Sound->als......
  • Linux音频(2):pulseaudio
    pulseaudio作为声音服务器,启动时根据配置文件对ALSA子系统进行配置,并作为后台进程进行声音重定向配置。官方文档位于《Documentation–PulseAudio》,但是没有更多概括性介绍和设计功能介绍。《PulseAudiounderthehood(gavv.net)》做了很好的补充,首先可以从这篇文档开始pulse......
  • Linux extcon概要记录
    关键词:extcon、uevent等。1extcon介绍extcon是ExternalConnector的简称,用于抽象外部连接器,比如说AudioJack、USBMicroB/TypeC接口等。extcon驱动的主要功能是识别外部连接器状态变化,并将状态变化通知到与外部连接器相关的其他驱动。2extcon内核配置extcon配置如下:Dev......
  • Linux-centos8-samaba配置
    安装samba:yuminstallsambasamba-clientsamba-swat检查是否安装成功:rpm-qa|grepsambasamba文件配置先将smb.conf备份,网上很多人都用rm,后面再建立个新文件cp/etc/samba/smb.conf/etc/samba/smb2.confls-laF/etc/samba/创建目录文件,并进行权限和安全相关设......
  • Linux常见命令-目录命令
    1.ls命令:显示目录下的内容基本格式[root@localhost~]#ls[选项][参数是文件名或目录名]常用选项-a:显示所有文件--color=when:支持颜色输出-d:显示目录信息,并非目录下的文件-h:易读化显示。文件的大小按照KB,MB为单位显示-i:显示文件的i节点号-l:显示文件的详细信息范例参......
  • 在Linux中,如何管理SSL/TLS证书?
    在Linux系统中,管理SSL/TLS证书是确保Web服务安全的重要环节。SSL(SecureSocketsLayer)和TLS(TransportLayerSecurity)证书用于加密服务器和客户端之间的通信,保护数据传输的安全。以下是管理SSL/TLS证书的一般步骤:1.获取SSL/TLS证书从证书颁发机构(CA)购买:如果你需要一个商业网......
  • Linux白屏部署OceanBase集群版
    本次将部署三个节点,将介质OceanBaseAllinOne传到一个节点上即可。#下载并解压安装包[root@tidb01db_ob]#tar-xzvfoceanbase-all-in-one-4.3.0.1-100000242024032211.el7.x86_64.tar.gz[root@tidb01db_ob]#cdoceanbase-all-in-one/[root@tidb01oceanbase-all-in-on......