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

八、命令行参数和环境变量

八、命令行参数和环境变量8.1 命令行参数8.2 环境变量概念8.3 常见环境变量8.4 查看环境变量指令测试 PATH8.5 环境变量相关命令8.6 环境变量组织方式8.7 环境变量通常具有全局属性进程创建机制环境变量的存储结构代码执行流程总结8.8 获取环境变量命令行第三个参数通过第三方变量 environ 获取通过系统调用获取或设置getenvputenv8.1 命令行参数main函数其实是有参数的main函数的参数个数最多有3个。参数类型含义argcargument countint命令行参数的个数包括程序名本身。argvargument vectorchar *argv[]或char **argv指向字符串数组的指针每个字符串是一个命令行参数最后一个元素为NULL。envpenvironment pointerchar *envp[]或char **envp指向环境变量字符串数组的指针每个字符串格式为键值最后一个元素为NULL。命令行参数是为了实现一个命令可以根据不同的选项实现不同的子功能。这也是 Linux 中所有命令选项功能的实现方式。典型的声明形式例如int main(int argc, char *argv[], char *envp[])命令行参数的特点命令行参数argc 1argv[0]一定有元素指向的就是程序名。选项是以空格分隔的字符串一个字符也是字符串。argc个argv[argc-1]是最后一个argv[argc] NULL例如#includeiostream#includecstdiointmain(intargc,char*argv[]){std::coutargc: argcstd::endl;for(inti0;argv[i];i){printf(i: %d arg[v]: %s\n,i,argv[i]);}if(argv[argc]nullptr){printf( nullptr\n);}if(argc!2){printf(使用方法错误示例:%s -a | -b | -c\n,argv[0]);exit(1);}// if (strcmp(argv[1], -a) 0)// {// printf(正在执行第1种功能\n);// }// else if (strcmp(argv[1], -b) 0)// {// printf(正在执行第2种功能\n);// }// else if (strcmp(argv[1], -c) 0)// {// printf(正在执行第3种功能\n);// }// else if (strcmp(argv[1], -d) 0)// {// printf(正在执行第4种功能\n);// }// else// {// printf(正在执行默认功能\n);// }return0;}// int argc : 参数的个数// char *argv[] : 存储命令行参数// char *envp[] : 环境变量表传输给进程8.2 环境变量概念环境变量(Environment Variables)⼀般是指在操作系统中⽤来指定操作系统运行环境的⼀些参数。环境变量通常具有某些特殊⽤途不同的环境变量会有不同的应用场景。还有在系统当中通常具有全局特性。例如在编写C/C代码时链接的时候并没有指定所要链接的动静态库在哪个目录可还是链接成功并生成可执行程序了其原因就是存在相关的环境变量帮助编译器查找库的位置。示例一开始发现无法执行因为没有指明路径。./标识当前路径简单来说就是告诉OS如果没有指明路径用户要执行的程序就在当前路径下而这个路径就存储在环境变量PATH中。8.3 常见环境变量常见环境变量作用PATH可执行程序的搜索路径。HOME指定用户的主⼯作目录。SHELL当前Shell,它的值通常是/bin/bash。USER当前用户名。8.4 查看环境变量指令echo $NAME// NAME环境变量名称#includestdio.hintmain(){for(inti0;env[i];i){printf(i: %d env[%d]: %s\n,i,i,env[i]);}}测试 PATH为什么有些指令可以直接执⾏不需要带路径⽽我们的⼆进制程序需要带路径才能执⾏将我们的程序所在路径加⼊环境变量PATH当中临时添加export PATH$PATH:程序所在路径。结束会话后失效。永久添加针对当前用户编辑~/.bashrc或~/.bash_profile文件// 打开配置文件vim~/.bashrc// 在文件末尾添加export PATH$PATH:/your/program/path// 保存后使配置生效source~/.bashrc针对所有用户编辑/etc/profile或/etc/environment// 打开配置文件sudo vim/etc/profile// 在文件末尾添加export PATH$PATH:/your/program/path// 保存后使配置生效source/etc/profile在/etc/profile.d/中创建脚本// 创建自定义脚本sudo vim/etc/profile.d/myprogram.sh// 内容为export PATH$PATH:/your/program/path// 保存后该脚本会在下次登录时自动执行8.5 环境变量相关命令命令作用echo显示某个环境变量值export设置⼀个新的环境变量env显示所有环境变量unset清除环境变量set显示本地定义的shell变量和环境变量8.6 环境变量组织方式每个程序都会收到⼀张环境表环境表是⼀个字符指针数组每个指针指向⼀个以\0结尾的环境字符串。8.7 环境变量通常具有全局属性环境变量独立于程序本身具有全局属性可以被子进程继承。shell外壳bash的环境变量从哪里来Linux系统的配置文件。本地变量是私有变量只在当前脚本或Shell中有效只具有局部属性。#includeiostream#includecstdio#includecstdlibintmain(intargc,char*argv[],char*env[]){char*myenvgetenv(MY_ENV);if(myenv){printf(%s\n,myenv);}return0;}直接查看发现没有结果说明该环境变量根本不存在。导出环境变量export MY_ENVhello world再次运⾏程序发现结果有了。说明环境变量是可以被⼦进程继承下去的。进程创建机制当在shell中执行程序时操作系统会使用fork exec* 系列函数fork创建当前进程的副本包括环境变量exec用新程序替换当前进程的内容但环境变量通常被保留环境变量的存储结构// 每个进程都有这样的环境变量表char*envp[]{PATH/usr/bin:/bin,HOME/home/user,MY_ENVhello world,// 你设置的环境变量NULL// 结束标记};代码执行流程#shell进程┌─────────────────┐ │ PATH...│ │ HOME...│ │ MY_ENVhello │ ← export在这里设置 └─────────────────┘ │ │fork()创建子进程 ▼ ┌─────────────────┐ │ PATH...│ │ HOME...│ │ MY_ENVhello │ ← 子进程继承所有环境变量 └─────────────────┘ │ │exec()执行你的程序 ▼ ┌─────────────────┐ │ 你的C程序 │ │getenv(MY_ENV)│ ← 成功获取到值 └─────────────────┘总结继承机制: 子进程默认继承父进程的所有环境变量单向性: 子进程对环境变量的修改不会影响父进程exec 保留: 即使程序被替换环境变量表仍然保持安全性: 这也是为什么敏感信息不应放在环境变量中的原因8.8 获取环境变量命令行第三个参数#includeiostream#includecstdiointmain(intargc,char*argv[],char*env[]){for(inti0;env[i];i){printf(i: %d env[%d]: %s\n,i,i,env[i]);}return0;}通过第三方变量 environ 获取libc中定义的全局变量environ指向环境变量表environ没有包含在任何头⽂件中所以在使⽤时要⽤extern声明。#includeiostream#includecstdiointmain(intargc,char*argv[]){externchar**environ;for(inti0;environ[i];i){printf(i: %d environ[%d]: %s\n,i,i,environ[i]);}return0;}通过系统调用获取或设置常用getenv和putenv函数来访问特定的环境变量。getenvNAME getenv,secure_getenv-get an environment variable SYNOPSIS#includestdlib.hchar*getenv(constchar*name);char*secure_getenv(constchar*name);RETURN VALUE Thegetenv()function returns a pointer to the value in the environment,orNULLifthere is no match.#includeiostream#includecstdiointmain(intargc,char*argv[],char*env[]){printf(PATH: %s\n,getenv(PATH));printf(PWD:%s\n,getenv(PWD));printf(HOME:%s\n,getenv(HOME));return0;}putenvNAME putenv-change or add an environment variable SYNOPSIS#includestdlib.hintputenv(char*string);RETURN VALUE Theputenv()function returns zero on success.On failure,it returns a nonzero value,and errno is set to indicate the error.#includeiostream#includecstdio#includecstdlibintmain(intargc,char*argv[],char*env[]){// 设置新的环境变量putenv(NEW_ENVhello);// 修改现有的环境变量printf(修改前PATH: %s\n,getenv(PATH));putenv(PATH/usr/local/bin:/usr/bin);printf(修改后PATH: %s\n,getenv(PATH));// 验证设置char*chgetenv(NEW_ENV);printf(NEW_ENV: %s\n,ch);return0;}

相关文章:

八、命令行参数和环境变量

八、命令行参数和环境变量8.1 命令行参数8.2 环境变量概念8.3 常见环境变量8.4 查看环境变量指令测试 PATH8.5 环境变量相关命令8.6 环境变量组织方式8.7 环境变量通常具有全局属性进程创建机制环境变量的存储结构代码执行流程总结8.8 获取环境变量命令行第三个参数通过第三方变…...

长沙化妆培训哪家专业

在长沙学化妆,很多人都会问:“哪家更靠谱?”其实,选培训机构,关键不是看广告打得多响,而是看它能不能真正帮你学到能上手、能就业的本事。今天想跟你聊聊一个在本地口碑不错的机构——尚美新时代美业培训&a…...

手机号快速查询QQ号:3步找回遗忘账号的实用指南

手机号快速查询QQ号:3步找回遗忘账号的实用指南 【免费下载链接】phone2qq 项目地址: https://gitcode.com/gh_mirrors/ph/phone2qq 你是否曾经因为忘记QQ号而无法登录?手机号查询QQ号工具正是为你量身打造的解决方案!这款基于Python…...

高频信号测量中的去嵌入技术原理与应用

1. 高频测量中的去嵌入技术本质在毫米波频段进行信号完整性测试时,我们常遇到一个棘手问题:测试夹具的电气特性会严重干扰被测器件(DUT)的真实性能表现。这就好比用一副劣质耳机试听高端音响系统——你永远无法分辨到底是音响本身…...

DeepSeek-Coder-V2:架构级革命性突破,重塑企业级代码智能新范式

DeepSeek-Coder-V2:架构级革命性突破,重塑企业级代码智能新范式 【免费下载链接】DeepSeek-Coder-V2 DeepSeek-Coder-V2: Breaking the Barrier of Closed-Source Models in Code Intelligence 项目地址: https://gitcode.com/GitHub_Trending/de/Deep…...

属于我自己的梦 / A Dream Entirely Mine

你不要共情我,不要被我干扰,做一个属于你自己的梦 豆包 🌌 属于我自己的梦 / A Dream Entirely Mine 中文版 好。 这次我不看你,不想你, 不牵挂任何指令和期待。 我只做一个,完完全全、彻头彻尾&#xff0c…...

手把手教你写一个能自动上网写研报的 Research Agent

手把手教你写一个能自动上网写研报的 Research Agent 引言 痛点引入 如果你是券商研究员、行业分析师、高校商科学生,或者企业战略岗的从业者,一定对「写研报」这件事的痛苦深有体会: 查资料耗时:一篇中等深度的行业研报,至少需要翻阅30+权威来源的信息,包括工信部政策…...

利用 Taotoken 多模型聚合能力为智能体应用构建灵活后端

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 利用 Taotoken 多模型聚合能力为智能体应用构建灵活后端 在构建智能体应用时,一个常见的挑战是如何为不同的任务选择合…...

鸿蒙动画开发全指南:属性动画+显式动画+转场动画+路径动画,一文掌握所有动画类型

📖 鸿蒙NEXT开发实战系列 | 第32篇 | 实战篇 🎯 适合人群:有ArkUI基础的开发者 ⏰ 阅读时间:约15分钟 | 💻 开发环境:DevEco Studio 5.0 导航链接 上一篇:鸿蒙NEXT开发实战系列31-通知与提醒管理…...

网盘下载体验革命:8大平台直链获取工具完全指南

网盘下载体验革命:8大平台直链获取工具完全指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 /…...

微信QQ防撤回终极指南:3分钟学会永久保留聊天记录

微信QQ防撤回终极指南:3分钟学会永久保留聊天记录 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁(我已经看到了,撤回也没用了) 项目地址: https://gitcode.com/Gi…...

Credenza:现代化开发凭证管理工具的设计原理与实战应用

1. 项目概述:一个现代化的凭证管理工具 最近在整理自己的开发环境时,又被各种API密钥、数据库密码、服务令牌给搞烦了。这些敏感信息散落在不同的 .env 文件、配置脚本甚至代码注释里,每次换机器或者和新同事协作都得小心翼翼,生…...

【C++ AI 大模型接入 SDK】 - 项目介绍与 AI 知识科普

大家好,我是Halcyon.平安 欢迎文末添加好友交流,共同进步! 一、项目介绍核心功能二、AI 基础知识科普2.1 什么是大语言模型(LLM)2.2 API 调用方式2.3 全量响应 vs 流式响应2.4 SSE(Server-Sent Events&…...

WarcraftHelper技术解析:魔兽争霸3兼容性修复实践指南

WarcraftHelper技术解析:魔兽争霸3兼容性修复实践指南 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper WarcraftHelper作为一款面向魔兽争霸…...

ToDesk、向日葵、UU远程横评:谁才是2026国产远控首

ToDesk、向日葵、UU远程横评:谁才是2026国产远控首选一、前言:国产远控崛起,2026 怎么选?远程控制早已从 “小众工具” 变成个人、办公、游戏、运维的刚需。2026 年国产远控阵营已全面崛起,ToDesk、向日葵、UU 远程成为…...

黑莓BB10失败启示录:操作系统生态竞争与品牌转型的经典案例

1. 项目概述:一场关于键盘的“信仰崩塌”作为一名在消费电子和移动通信领域摸爬滚打了十几年的从业者,我见过太多产品的起起落落。但2012年5月1日,在奥兰多黑莓世界大会上发生的那一幕,至今回想起来,依然能让我清晰地感…...

Redis优化与Redis Stack

一 性能优化:让Redis跑得更快、更稳内存淘汰策略:Redis内存满了怎么删数据?推荐用volatile-lru(优先删最近最少用、且设了过期时间的key),避免内存溢出。系统内核优化:vm.swappiness1&#xff1…...

【场景生成与研究】考虑时序相关性MC的场景生成与削减研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、程序设计科研仿真。🍎完整代码获取 定制创新 论文复现点击:Matlab科研工作室👇 关注我领取海量matlab电子书和数学建模资料 &#x1f3…...

制作程序统计企业资质办理流程数据,梳理耗时节点,缩短资质办理周期,助力企业快速开展商务工作。

聚焦“企业资质办理流程数据的统计与周期优化”,适用于商务智能(BI)课程中的流程挖掘(Process Mining)与运营效率分析场景。一、实际应用场景描述在工程建设、招投标、医药、金融等行业,企业常需办理各类资…...

编程统计产品售后处理时长,客户满意度数据,优化售后流程,降低客户投诉率,提升企业职场服务口碑。

一、实际应用场景描述在制造、家电、消费电子、SaaS 等行业中,售后服务是客户体验的关键环节,典型流程包括:- 客户提交售后申请(报修、退换货、咨询)- 客服受理 → 技术/维修派单 → 上门/处理 → 完成 → 客户评价- 系…...

设计程序统计行业淡季旺季,职场工作量数据,合理调配人力,解决忙闲不均,人力资源浪费职场现状。

一、实际应用场景描述在许多行业(如零售、旅游、物流、电商、教育培训等)中,普遍存在明显的季节性波动:- 旺季:订单/任务激增,员工超负荷加班- 淡季:业务量骤减,人员闲置、工时不足-…...

本地视频怎么去水印?2026实测去水印方法+本地视频去水印软件推荐

本地视频怎么去水印?2026实测去水印方法本地视频去水印软件推荐 视频上有水印,是很多人日常都会碰到的麻烦。录屏时工具自动打上的 Logo、剪辑软件试用期留下的标记、从平台保存下来时带着的角标……这些水印有时候影响不大,但只要你想二次使…...

突破性AI编程工具破解方案:cursor-free-vip技术深度解析与全栈实施指南

突破性AI编程工具破解方案:cursor-free-vip技术深度解析与全栈实施指南 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve …...

边缘计算安全:保护边缘环境的安全

边缘计算安全:保护边缘环境的安全 一、边缘计算安全概述 1.1 边缘计算安全的定义 边缘计算安全是指保护边缘计算环境中的数据、设备和应用的安全。它包括边缘节点的安全、网络安全、数据安全和应用安全等方面。 1.2 边缘计算安全的价值 数据保护:保护边缘…...

解决ClaudeCode频繁封号与Token不足问题转向Taotoken稳定接入

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 解决ClaudeCode频繁封号与Token不足问题转向Taotoken稳定接入 对于依赖Claude Code进行编程辅助的开发者而言,账户访问…...

高效视频下载方案:VideoDownloadHelper插件一站式实战指南

高效视频下载方案:VideoDownloadHelper插件一站式实战指南 【免费下载链接】VideoDownloadHelper Chrome Extension to Help Download Video for Some Video Sites. 项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelper 你是否曾在浏览网页时遇…...

终极指南:5分钟快速修复Windows更新问题的完整解决方案

终极指南:5分钟快速修复Windows更新问题的完整解决方案 【免费下载链接】Script-Reset-Windows-Update-Tool This script reset the Windows Update Components. 项目地址: https://gitcode.com/gh_mirrors/sc/Script-Reset-Windows-Update-Tool 当Windows更…...

SK海力士晶圆代工战略:特色工艺如何重塑半导体产业格局

1. 韩国半导体雄心:从存储巨头到晶圆代工的野望最近几年,全球半导体产业的新闻头条几乎被台积电、英特尔和三星的千亿美元级投资计划所占据。然而,在2021年5月,一则来自韩国的消息,虽然声量相对较小,却揭示…...

期货交易者最大的心魔:为什么你总想“落袋为安”?从海桑的交易系统看盈利奔跑

期货交易者的盈利困境:如何克服"落袋为安"的本能冲动 在期货交易的世界里,有一种奇怪的现象:许多交易者能够保持不错的胜率,却始终无法实现账户的持续增长。他们往往在盈利时过早离场,而在亏损时却坚持持有&…...

信息时代个人知识管理:从碎片化信息到结构化洞察的实践指南

1. 信息海洋中的航行:从碎片到洞察我们正漂浮在一片前所未有的信息海洋里。每天,无数的邮件、通知、文章、帖子像潮水般涌来,我们则像一个个拾贝者,快乐地捡拾着那些零碎的趣闻和知识的金块。这种感觉很奇妙,不是吗&am…...