当前位置: 首页 > news >正文

进程(2):环境变量与进程地址空间

命令行参数

命令行参数是用户在命令行界面执行可执行程序 / 系统命令时,紧跟在程序名之后输入的字符串序列。

C语言程序想要接收命令行参数,必须使用 main 函数的完整标准原型:

intmain(intargc,char*argv[])
参数名全称含义
argcargument count命令行参数的总个数(整数)
argvargument vector命令行参数数组(字符串数组)

规则

  • argv[0]固定为程序名 / 程序路径
  • argv[1] ~ argv[argc-1]:用户输入的真正参数
  • argv[argc]:固定为 NULL(数组结束标记)
  • argc最小值 = 1

示例:

#include<stdio.h>#include<string.h>intmain(intargc,char*argv[]){for(inti=0;i<argc;i++){printf("argv[%d]: %s\n",i,argv[i]);}return0;}

总结:进程拥有一张argv表(命令行参数表),用来支持实现选项功能。

  • 内核加载程序时,会将命令行参数拷贝到进程内存,为进程自动创建 argv 表;
  • 每个进程都有独立的 argv 表,互不干扰、互不共享;
  • 程序通过main(argc, argv)直接访问这张表。

环境变量

基本概念

  • 环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数
  • 环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性
  • 格式固定:大写变量名=字符串值
  • 本质:进程的全局配置表

核心特性

  • 系统中每一个进程都有自己独立的环境变量表,进程之间环境变量相互隔离。
  • 父子进程默认继承:父进程通过fork()创建子进程时,子进程会完整复制父进程的环境变量表
  • 子进程修改自己的环境变量 不会影响父进程,父进程修改也不会影响已经创建好的子进程

核心作用

  1. 提供命令搜索路径(核心PATH),让系统不用写全路径就能执行命令
  2. 保存用户基本信息:家目录、用户名、当前工作目录
  3. 配置系统运行环境:语言编码、终端类型、动态库路径
  4. 为应用程序提供全局运行配置,无需修改代码即可改变程序行为

常见的环境变量

  1. PATH:命令搜索路径,多个路径用:分隔
  2. HOME:当前用户家目录
  3. USER:当前登录用户名
  4. PWD:当前所在工作目录
  5. OLDPWD上一次所在目录,cd -就是读取它
  6. SHELL:当前默认命令行解释器(一般/bin/bash
  7. HISTSIZE:内存中最多能保存多少条历史命令记录
  8. LD_LIBRARY_PATH:动态链接库搜索路径,程序运行时找依赖.so 库

Linux 环境变量 常用操作命令

  1. 查看环境变量
env# 查看所有环境变量echo$PATH# 查看单个环境变量echo$HOME
  1. 临时添加环境变量(只对当前这个终端窗口有效,关闭终端 → 变量立刻消失)
# 定义新环境变量export变量名="变量值"# 最常用:给 PATH 追加路径(**千万不要直接覆盖,要追加!**)exportPATH=$PATH:新路径
  1. 取消环境变量
unset变量名unsetTEST
  1. 永久生效(加载配置文件)
    修改完/etc/profile(系统全局永久添加) 或~/.bashrc(当前用户永久添加)后执行:
source~/.bashrc

环境变量 底层存储结构

  • 每个进程内部都有一张环境变量表,底层是字符串数组:char *environ[];
  • 数组中每一项都是NAME=VALUE格式字符串
  • 环境表末尾以NULL标记结束
  • 和命令行参数表argv[]并列,都是进程
http://www.jsqmd.com/news/795791/

相关文章:

  • 从‘水管’到‘高速公路’:用‘时延带宽积’重新理解你的网络容量,别再让高带宽‘空转’了
  • Applera1n终极指南:3步解锁iOS 15-16激活锁的完整技术方案
  • 告别版本混乱:Maven多模块项目CI/CD友好版本管理实战 (${revision}与flatten-maven-plugin)
  • 小小调度器:轻量任务调度的艺术
  • 别再死记硬背了!用Python+NumPy手搓一个简易OFDM发射机,彻底搞懂4G LTE的调制复用
  • Dijkstra算法(朴素版堆优化版)
  • 打通企业身份孤岛:Nextcloud无缝对接Active Directory LDAP实战
  • LangGraph Agent 开发指南(1~概述)
  • AD17 3D Body实战:从零绘制异形连接器的简易3D封装
  • 英雄联盟回放播放器终极指南:ROFL-Player完全使用手册
  • 查重全红别慌!2026年5款降AI黑科技亲测,论文降AI轻松降至10%以下 - 降AI实验室
  • 告别软件模拟!用GD32F303的硬件I2C0高效读写EEPROM(附小熊派工程源码)
  • 基于规则引擎与LLM的B站关注列表智能分类实践
  • Day26:角色管理 API 完整教程(CRUD + 分配菜单 + 事务)
  • 如何快速掌握LeagueAkari:面向新手的英雄联盟本地自动化工具完整使用指南
  • STM32新手避坑指南:正点原子、野火、慧净、小马飞控的Systick延时代码到底差在哪?
  • 解锁B站缓存视频:m4s转MP4工具完全指南
  • 报错 SQLite Error 5 database is locked 生产环境怎么排查
  • 小小调度器:轻量任务调度的应用
  • 从 performWorkOnRoot 到 workInProgress tree:React 真正开始 render 的地方
  • C语言指针:从零掌握指针(4)
  • 千问 LeetCode 2227. 加密解密字符串 Python3实现
  • Unitree GO2 ROS2 SDK完整指南:5步实现四足机器人智能控制与自主导航
  • 2026年中石化加油卡回收靠谱平台最新深度测评 - 京顺回收
  • [具身智能-622]:高速图像传感器接口(视觉 / 摄像头)与数据格式
  • 别再只加contentDescription了!Android无障碍适配TalkBack的7个实战避坑点(含完整代码)
  • 根据用户主动关注用户和用户朋友圈以及其他关系层面平台注入的用户 系统推荐程序返回用户推荐列表
  • 第四章 数字孪生制作完整流程
  • 无人机通信安全渗透测试:从信号拦截到GPS欺骗的完整攻防框架
  • 茅台自动预约系统:告别手动抢购,实现智能预约的完整解决方案