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

硬核手搓解析!进程-内核分析:命令行参数及环境变量,重构main()

目录命令行参数与环境变量命令行参数vim下的main()环境变量环境变量的应用举例查询环境变量全部查询针对名称查询常用的方式环境变量的更改配置环境变量进程命令行参数及环境变量的关系结论获取环境变量①getenv();②environ();本地变量特性本地变量的删除本地变量-环境变量问题探讨内建命令库函数与系统调用重构了main()函数-参数、运行环境基于Linux进程深度下的吐血整理~~命令行参数与环境变量命令行参数一个命令可以通过 [选项] 来实现特定的功能。像ls -a 及ls -a -l类似于以前使用的main()函数中你可能见过的l两种形态int main(int argc, char *argv[]); int main(int argc, char **argv);main()作为程序的入口实际上我们也可以通过外部指定[选项]来传入并调用特定功能vim下的main()vim内int main(int argc, char *argv[]) { //…… return 0; }在bash# 执行命令 ./a.out -l -a hello world 123本质就是将-l -a hello world 123分别分割并传入argv[]argc5argv[0]./myprogram程序名argv[1]-largv[2]-aargv[3]helloargv[4]worldargv[5]123argv[6]NULL结束标志运行代码#include stdio.h int main(int argc, char *argv[]) { printf(参数个数: %d\n, argc); for (int i 0; i argc; i) { printf(argv[%d] %s\n, i, argv[i]); } return 0; }makefile内1 SRC$(wildcard *.c) 2 OBJ$(SRC:.c.o) 3 CCgcc -stdc99 4 LFLAGS-o 5 FLAGS-c 6 RMrm -f 7 all:$(OBJ) 8 $(CC) $^ $(LFLAGS) pc 9 %.o:%.c 10 $(CC) $(FLAGS) $ $(LFLAGS) $ 11 .PHONY: clean 12 clean: 13 $(RM) pc $(OBJ)运行环境变量☆功能环境变量是进程级[背景]配置。特性说明本质键值对(HOME/home/wzb)作用配置环境运行环境无需修改代码继承性子进程自动继承父进程的环境变量作用范围当前进程及其子进程因此环境变量具有全局特性可被所有进程继承。“进程级”配置又是一位程序新引入的执行逻辑大大增加代码的复杂度。就像C中引入条件语句一般是跨越性进步。环境变量的应用举例查询环境变量全部查询env会打印显示全部已配置环境变量格式为[环境变量名称][环境变量内容]针对名称查询常用的方式echo $[名称] #例如echo $PATH环境变量的更改①[原名称][新的绝对路径] #覆盖原路径②[原名称]$[原名称]:[拼接路径] #简便地路径拼接配置环境变量增加环境变量export [名称][内容]删除环境变量unset [名称]进程命令行参数及环境变量的关系无需多言我们在VS2022下运行#includestdio.h int main(int argc, char* argv[], char* envp[]) { // envp是环境变量数组格式为KEYval for (char** env envp; *env ! NULL; env) { printf(%s\n, *env); } return 0; }运行结果结果显而易见环境变量全部显现。结论因此自入进程开始我们就处于“命令行参数”“环境变量”的配置环境。图示如下获取环境变量①getenv();头文件stdlib.h函数原型char* getenv(const char* name);使用输入环境变量的名称来获取指向环境变量值的指针/NULL。 // 指向目录路径#include stdio.h #include stdlib.h int main() { char *path getenv(PATH); char *home getenv(HOME); printf(PATH: %s\n, path); printf(HOME: %s\n, home); return 0; }运行结果PATH: /usr/local/bin:/usr/bin:/bin HOME: /home/wzb②environ();头文件stdlib.h函数原型extern char** environ;二级指针型访问数据可使用下标直接访问代码实现输出同样的结果本地变量本地变量是定义于vim外bash内的变量。特性不会被子进程继承。定义时两侧不能加空格#否则会被当做命令进行查询 像:i10正确而i 10就是错误的本地变量的删除像环境变量一样unset [本地变量名]本地变量-环境变量export[本地变量名称]问题探讨内建命令众所周知Linux指令是bash进程下执行文件的子进程。假如export指令是一般性指令怎么做到的子进程指令处理内容到父进程呢实际上export别于一般性指令其本质是“内建命令”(build-in command)。其不需要创建子进程而是让bash自己操作。库函数与系统调用指令man的指定页查询1用户命令可执行程序ls,cd,grep,find2系统调用内核提供的接口read,write,open,fork3库函数C 标准库printf,malloc,strcpy库函数与系统调用的对比维度系统调用库函数运行空间内核态Kernel Mode用户态User Mode调用开销大需上下文切换小普通函数调用实现者操作系统内核语言库如 glibc或应用程序例子read()、write()、open()、fork()printf()、scanf()、fread()、strcpy()是否缓冲无缓冲直接操作内核通常有缓冲如 stdio 缓冲执行速度慢快博主吐血回顾重构整理 求关注o(╥﹏╥)o

相关文章:

硬核手搓解析!进程-内核分析:命令行参数及环境变量,重构main()

目录 命令行参数与环境变量 命令行参数 vim下的main() 环境变量 环境变量的应用举例 查询环境变量 全部查询 针对名称查询(常用的方式) 环境变量的更改 配置环境变量 进程:命令行参数及环境变量的关系 结论 获取环境变量 ①get…...

工程师背包线缆管理实战:从Cord Hog到DIY收纳方案全解析

1. 项目概述:从“线缆地狱”到个人收纳方案的探索作为一名常年与各种开发板、调试器、电源适配器和数据线打交道的硬件工程师,我的背包简直就是个微缩版的电子实验室。每天通勤,包里除了笔记本电脑,必然塞满了USB线、串口线、JTAG…...

需求驱动设计:构建可追溯、高质量的FPGA/ASIC开发流程

1. 项目概述:为什么我们需要一场关于“需求驱动设计”的讨论?如果你是一名FPGA或ASIC的设计工程师、项目经理,或者正在向这个领域迈进,那么“项目延期”、“功能bug在流片前夜才被发现”、“需求变更导致架构推倒重来”这些场景&a…...

阿里云第一季营收416亿:EBITA为38亿 同比增57%

雷递网 乐天 5月13日阿里巴巴(美股代码:“baba”,港股代号:9988)今日发布2026年第一季度的财报。财报显示,阿里2026年第一季度营收为2433.8亿元(352.83亿美元),同比增长3…...

阿里从蚂蚁收到股息33亿:AI投入加大致后者年利润153亿 同比降60%

雷递网 乐天 5月13日阿里今日发布财报。财报披露,蚂蚁在2026年第一季度给阿里带来的投资收益为3.75亿(约5500万美元),较上年同期的17.63亿元下降78.7%。截至2026年3月31日,阿里对蚂蚁集团在全面摊薄基础上的股权为33%。…...

专利撰写难、公开不规范,patent-disclosure-skill:一站式专利公开技巧工具,搞定专利文书规范撰写难题

在知识产权越来越受重视的当下,不管是科研人员、技术开发者,还是企业知识产权相关从业者,在专利相关工作中,总会遇到各种各样的棘手问题。 很多人深耕技术研发,好不容易做出创新成果,可一到专利公开、文书梳…...

Windows平台终极PDF处理指南:Poppler工具集完整解决方案

Windows平台终极PDF处理指南:Poppler工具集完整解决方案 【免费下载链接】poppler-windows Download Poppler binaries packaged for Windows with dependencies 项目地址: https://gitcode.com/gh_mirrors/po/poppler-windows 还在为Windows系统上繁琐的PDF…...

阿里季报图解:营收2434亿 AI迎商业化拐点,模型及应用ARR年底破300亿,派息25亿美元

雷递网 雷建平 5月13日阿里巴巴(美股代码:“baba”,港股代号:9988)今日发布2026年第一季度的财报。财报显示,阿里2026年第一季度营收为2433.8亿元(352.83亿美元),同比增长…...

夏普鸿海合作破裂启示:跨文化并购中的技术控制与信任危机

1. 一场被寄予厚望的“联姻”为何走向破裂?2012年3月,当日本液晶面板巨头夏普宣布与全球最大电子代工企业鸿海(富士康)达成资本合作时,整个东亚电子产业圈都为之震动。这被视为一个标志性事件:一家以技术自…...

汽车电子架构演进:从分布式ECU到域控制器的技术变革与工程实践

1. 从一周新闻看汽车电子的演进脉络2012年8月的那一周,对于汽车电子行业来说,是平静水面下暗流涌动的一个缩影。当时,我正和几位在主机厂和Tier 1供应商工作的朋友频繁交流,大家普遍的感觉是,传统的汽车电子电气架构&a…...

增材制造如何破解光电子小批量定制化制造难题

1. 项目概述:一份被“雪藏”的产业复兴蓝图最近在整理行业资料时,我翻到了一篇2012年《EE Times》的老文章,标题叫《Seeing the light on optoelectronics manufacturing》。文章的核心观点很有意思,它批评了当时美国国家研究委员…...

深度拆解GPT-Realtime-2:从“能听会说”到“听懂人话”,靠的是什么?

请你想象这个场景: 你打电话订酒店,中途改主意3次,还接了另一个电话。AI全程没让你重复一句话。——这就是GPT-Realtime-2做到的事。三大模型,三类场景的精准切割OpenAI此次发布的核心策略是专业化分工:GPT-Realtime-2…...

如何用 setItem 与 getItem 规范地存取本地的字符串数据

localStorage的setItem和getItem仅支持字符串,存对象需JSON序列化,取值须判null并容错解析;键名应统一前缀,敏感数据慎存,大文本需评估容量。用 setItem 和 getItem 存取本地字符串数据,核心是确保数据类型…...

Ai小程序入门00-初识AI编程(小白入门:不懂代码也能做小程序?AI编程到底怎么玩)

Ai小程序入门00-初识AI编程(小白入门:不懂代码也能做小程序?AI编程到底怎么玩) 📌 文章简介:很多人都有一个"做个小程序赚钱"或"实现自己创意"的梦想,但往往被复杂的代码、繁琐的环境配置劝退。如今,AI 编程工具(如 Cursor、Claude 等)彻底改变…...

边缘AI推理芯片选型指南:从吞吐量到延迟的实战评估

1. 从数据中心到边缘:AI推理范式的根本性转变如果你正在为你的下一个AI项目选型硬件,尤其是在考虑将模型部署到摄像头、汽车或者医疗设备上,那么“边缘AI推理”这个词你一定不陌生。但很多人,包括一些经验丰富的工程师&#xff0c…...

物联网隐私工程:从数据生命周期到安全设计实践

1. 物联网隐私困境:一个被误解的工程问题每次和同行聊起物联网项目,大家最头疼的往往是协议选型、功耗优化或者成本控制。至于隐私?那通常是产品经理或者法务部门在项目后期才想起来要填的“合规表格”。我自己在早期做智能家居网关时也犯过同…...

资深工程师如何应对年龄增长带来的工作挑战:从照明优化到人体工学实践

1. 从一次生日派对说起:工程师的“年龄”与“视界”去年,我参加了一个在餐厅举办的50岁生日派对。餐厅的灯光有些昏暗,当菜单递过来时,除了我,桌上的每个人都掏出了手机,打开了LED手电筒。而在隔壁桌&#…...

HiveWE:现代化魔兽争霸III地图编辑器完全指南

HiveWE:现代化魔兽争霸III地图编辑器完全指南 【免费下载链接】HiveWE A Warcraft III world editor. 项目地址: https://gitcode.com/gh_mirrors/hi/HiveWE 还在为魔兽争霸III原版地图编辑器缓慢的加载速度和复杂的操作而烦恼吗?HiveWE作为一款专…...

AHB与APB总线桥接设计及SoC系统优化

1. AHB总线架构与APB桥接设计精要在复杂SoC设计中,AMBA总线作为ARM架构的核心互联标准,其AHB(Advanced High-performance Bus)与APB(Advanced Peripheral Bus)的协同工作直接影响系统性能。APB桥作为高低速…...

【限时决策窗口】ChatGPT Plus会员购买指南:避开3个高发误区,抓住GPT-4 Turbo+文件解析+自定义GPT三重红利期

更多请点击: https://intelliparadigm.com 第一章:ChatGPT Plus会员值不值得买 ChatGPT Plus 提供每月 $20 的订阅服务,主打 GPT-4 模型访问、高优先级响应队列、文件上传解析(PDF/CSV/TXT 等)及自定义 GPTs 功能。是…...

火山引擎AgentKit实战:从零构建企业级AI智能体应用

1. 从零到一:AgentKit代码工坊深度解析与实战指南如果你正在寻找一个能快速上手、功能强大的企业级AI Agent开发平台,那么火山引擎的AgentKit绝对值得你花时间深入研究。最近,我花了大量时间泡在它的官方代码示例仓库bytedance/agentkit-samp…...

从0到1构建DeepSeek抗注入能力:97.3%拦截率验证的5层LLM网关架构设计

更多请点击: https://intelliparadigm.com 第一章:从0到1构建DeepSeek抗注入能力:97.3%拦截率验证的5层LLM网关架构设计 为应对Prompt注入、越狱指令与上下文污染等高阶对抗攻击,我们设计并落地了一套轻量级、可插拔的5层LLM网关…...

嵌入式FPGA如何重塑MCU设计:从可编程I/O到硬件加速的范式变革

1. 微控制器的十字路口:成本困境与集成机遇作为一名在嵌入式领域摸爬滚打了十几年的工程师,我亲眼见证了微控制器(MCU)从简单的8位机发展到如今动辄数百兆赫兹主频、集成度惊人的复杂系统。但这些年,一个核心矛盾越来越…...

CFD热分析中绝热传热系数与叠加核函数原理及应用

1. CFD热分析中的绝热传热系数与叠加核函数原理剖析在电子设备热管理领域,随着功率密度的不断提升,传统的热设计方法已难以满足精度和效率的双重要求。绝热传热系数(Adiabatic Heat Transfer Coefficient, AHTC)与叠加核函数(Superposition Kernel Funct…...

工业控制中自定义串行总线协议的设计与实现:DataView系统实战

1. 项目背景与核心需求:为什么需要自定一个串行总线?在工业控制领域,尤其是信号调理模块和开关电源这类产品里,我们常常会遇到一个看似简单、实则棘手的问题:如何在有限的成本、空间和算力下,为多个分散的模…...

高频测试接口弹性插座技术解析与应用

1. 高频测试接口的革命性解决方案 在射频和毫米波器件测试领域,连接器性能往往成为整个系统的瓶颈。传统弹簧探针式测试插座在GHz频段会面临严重的信号完整性问题,而焊接式方案又缺乏必要的灵活性。Ironwood Electronics推出的SG-MLF-7078弹性插座&#…...

构建具备上下文感知的智能对话机器人:从记忆管理到主动服务

1. 项目概述:一个能“悬浮”的智能对话机器人最近在GitHub上看到一个挺有意思的项目,叫goncharenko/hoverbot-chatbot。光看名字,hoverbot就挺抓人眼球的,直译过来是“悬浮机器人”,这不禁让人好奇,一个聊天…...

通用型数据采集系统选型指南:从原理到实战的七维评估

1. 数据采集系统:从物理世界到数字世界的桥梁在航空航天、汽车、工业自动化乃至国防军工这些领域里,我们工程师每天打交道最多的,可能就是那些看不见摸不着的物理量:发动机涡轮叶片的温度、飞机机翼的应变、汽车悬架的动态压力、或…...

ARM架构SUB与SUBS减法指令详解

1. ARM减法指令概述在ARM架构中,SUB(减法)和SUBS(带标志位的减法)是最基础的算术指令之一。这些指令用于执行寄存器值的减法操作,是构建更复杂算术运算和控制流程的基础。SUB指令从目标寄存器中减去一个立即…...

如何快速解密RPG Maker加密文件:新手必看的完整解密指南

如何快速解密RPG Maker加密文件:新手必看的完整解密指南 【免费下载链接】RPGMakerDecrypter Tool for decrypting and extracting RPG Maker XP, VX and VX Ace encrypted archives and MV and MZ encrypted files. 项目地址: https://gitcode.com/gh_mirrors/rp…...