Linux的进程替换以及基础IO
进程替换
上一篇草率的讲完了进程地址空间的组成结构和之间的关系,那么我们接下来了解一下程序的替换。
首先,在进程部分我们提过了,其实文件可以在运行时变成进程,而我们使用的Linux软件其实也是一个进程,所以进一步来说,我们在Linux里写的一切文件都是子进程,而进程的替换一般就发生在父子进程之间,我们先了解一下它的特性,首先如果使用了进程替换,那么它会在替换处直接取代原有代码,覆盖式的运行,所以并不会产生新的子进程,也不会减少进程。所以一旦替换成功,之后的代码都会被覆盖不会执行。
那么我们接下来认识一下替换的方法:
exec系列
可以根据情况来使用这个系列进行替换。
execl
这里的 L 其实就代表 List 所以我们需要在参数结束时额外提供一个NULL给它辨认。

首先我们提供了一个路径给它,因为它需要我们给路径,然后它去找到路径然后执行。
之后我们紧跟着提供我们要执行的命令,当然你闲麻烦可以直接 " -al " ,最后最重要的是给一个NULL。

可以看到正如我们所料,在替换之前的内容被打印了,然后程序被替换成了 ls -al
而我们的 替换结束 这句话并没有被打印,因为是覆盖式替换。
上面是替换成功的情况,那么替换如果失败,则有一个值为-1的返回值,这个系列的接口只有失败才会有返回值,毕竟成功就运行了。


可以看到确实如此。
execlp
先上图
![]()
![]()
它们俩之间,其实并没有区别,只不过一个给了具体路径,一个没给,没给的那个是因为人家有path环境变量给系统带路呢。所以我们的execlp里的P就是Path,在这个接口,我们可以不用提供具体的路径给它,就像我们平时使用一般给个 ls 就好了(当然你想给全路径也行),系统会自己去path里找的,所以相对的,这个接口比较适合那些系统自带的命令使用,或者你不嫌麻烦把自己的路径添加进去也行。
它的用法也确实很简单,毕竟有了execl的前车之鉴,结果也不出所料。
![]()

execv
这里的V代表的就是Vector,当然了,它没带p所以第一个参数得给具体路径。

实际上它就是支持你把参数先放进数组里,然后一次性传进来,当然它为了防止类型的问题,所以可能会需要你进行强转保险。
所以衍生一下 execvp 想必我不说大伙也该知道咋用了。
execvpe
新BOSS来了,v和p我们都知道了,e是什么呢,e是环境变量,不过它用起来有点麻烦,大伙要先知道每个进程都有属于自己的环境变量,即使是子进程,也是使用父进程的环境变量,但是使用execvpe如果你传入了环境变量,那么它就会使用你传入的而不去使用旧的,但是如果你既想用旧的又想有新的,那可以直接追加。

这个追加的内容最好放在全局,然后就产生两条路了,如果你就想给个一两个,那么直接
![]()
这样你要追加的环境变量就会追加到原有的后面,然后你不要用 e 系列接口了,直接继续用execvp就好了。 这个putenv只会从你这里开始生效,也就是说如果你还有子进程,那它也可以看见这个新追加的,但是你的父进程就看不到了,因为这里发生了写实拷贝。
而如果你想追加很多新环境变量,还就想用 e 系列,那你就得

这样还是得先利用全局的数组去遍历的追加,然后putenv追加进去,最后
![]()
声明出来以后再把这个 environ 当环境变量传进去,这个environ就是原有的环境变量和追加的环境变量结合后的结果。
进程替换的实际使用
这就需要结合我们之前的父子进程了,我们在子进程使用替换的话并不会影响父进程,因为父子之间有写实拷贝,所以,我们可以利用子进程去跑我们想跑的进程,就像父进程就像函数调用一样。
我们甚至可以在自己的进程里替换成别的进程执行。

这是一个简单的c++程序。

随后我们就在之前的.c文件里创建一个子进程,然后用子进程替换我们的.cc文件。

然后我们就可以看见,它并不受到语言间的差异替换成功了。衍生一下就可以变成,根据上层传过来的数据形式,利用exec系列的接口来接收再使用。
基础IO
概念
首先在Linux环境下,对于文件,广义上的理解就是一切皆文件,而狭义的理解就是文件存放在磁盘里,磁盘是外设,它既是输入也是输出设备,所以对文件的操作就是对磁盘进行输入输出。而文件 = 内容 + 属性 ,所以对文件进行操作无非就是对文件的内容和属性做操作。
那么,谁来进行操作呢,操作系统。 但是操作系统不可能只管理一个文件,而我们也不可能只有一个文件,所以操作系统会为每一个文件创建一个包含该文件信息的结构体,然后利用一个链表来进行统一管理。
读写
在Linux里执行读写的操作其实和C语言一样,都是fopen打开,然后fread读或者fwrite写,最后记得fclose关闭即可。


这样就模拟出了一个cat的效果,可以只要有我们提供的文件名,它自己自动打印文件内容出来。
而根据我们的读写概念来理解,其实打印就是往指定位置输入内容,而这些位置一般又分为三个
:stdin标准输入 键盘文件、stdout标准输出 显示器文件 stderr 标准错误,显示器文件。
在程序启动时会自动打开这三个,所以我们能看到运行的结果或者过程。
以上就是基础IO的概念和以往的用法回顾,但是IO并不只是这样,还能往除了上述三个以外的地方读写,这个就在下一篇进行详解了。
相关文章:
Linux的进程替换以及基础IO
进程替换 上一篇草率的讲完了进程地址空间的组成结构和之间的关系,那么我们接下来了解一下程序的替换。 首先,在进程部分我们提过了,其实文件可以在运行时变成进程,而我们使用的Linux软件其实也是一个进程,所以进一步…...
《计算机网络A》单选题-复习题库
1. 计算机网络最突出的优点是(D) A、存储容量大B、将计算机技术与通信技术相结合C、集中计算D、资源共享 2. RIP 路由协议的最大跳数是(C) A、13B、14C、15D、16 3. 下面哪一个网络层次不属于 TCP/IP 体系模型(D&a…...
闲谭Scala(2)--安装与环境配置
1. 概述 Java开发环境安装,需要两步,第一安装JDK,第二配置环境变量。 Scala的话,也是两步,第一安装Scale环境,第二配置环境变量。 需要注意的是,配置环境变量,主要是想让windows操…...
Python基于卷积神经网络的车牌识别系统开发与实现
1. 简介 车牌识别是人工智能在交通领域的重要应用,广泛用于高速违章检测、停车场管理和智能交通系统等场景。本系统通过基于卷积神经网络(CNN)的深度学习算法,结合 Python 和 MySQL 实现车牌的快速识别与管理。 系统特点&#x…...
Spring Boot集成Netty创建一个TCP服务器,接收16进制数据(自定义解码器和编码器)
Netty Netty是一个高性能、异步事件驱动的网络应用程序框架,它提供了对并发和异步编程的抽象,使得开发网络应用程序变得更加简单和高效。 在Netty中,EventLoopGroup是处理I/O操作的多线程事件循环器。在上面的示例中,我们创建了两个EventLoopGroup实例:bossGroup和worker…...
Python 中的 with open:文件操作的最佳实践
在 Python 中,文件操作是最常用的一项任务,无论是读取文件内容,还是将数据写入文件。传统的文件操作方式使用 open() 和 close() 函数来处理文件,但在实际开发中,我们推荐使用 with open() 语句来进行文件操作。本文将…...
哪些框架、软件、中间件使用了netty? 哪些中间件、软件底层使用了epoll?
使用 Netty 的软件、中间件和框架 Netty 是一个异步事件驱动的网络应用框架,广泛应用于构建高性能的网络应用程序。以下是一些使用了 Netty 的知名软件、中间件和框架: 1. Elasticsearch 描述:Elasticsearch 是一个分布式的搜索和分析引擎…...
AI 智能助手对话系统
一个基于 React 和 Tailwind CSS 构建的现代化 AI 对话系统,提供流畅的用户体验和丰富的交互功能。 项目链接:即将开放… 功能特点 🤖 智能对话:支持与 AI 助手实时对话,流式输出回答📁 文件处理ÿ…...
2024年秋词法分析作业(满分25分)
【问题描述】 请根据给定的文法设计并实现词法分析程序,从源程序中识别出单词,记录其单词类别和单词值,输入输出及处理要求如下: (1)数据结构和与语法分析程序的接口请自行定义;类别码需按下表格…...
Docker镜像瘦身:从1.43G到22.4MB
Docker镜像瘦身:从1.43G到22.4MB 背景1、创建项目2、构建第一个镜像3、修改基础镜像4、多级构建5、使用Nginx背景 在使用 Docker 时,镜像大小至关重要。我们从 create-react-app (https://reactjs.org/docs/create-a-new-react-app.html)获得的样板项目通常都超过 1.43 GB…...
前端加解密对抗encrypt-labs
前言 项目地址:https://github.com/SwagXz/encrypt-labs 作者:SwagXz 现在日子越来越不好过了,无论攻防、企业src还是渗透项目,总能看到大量的存在加密的网站,XZ师傅的前端加密靶场还是很值得做一做的,环…...
Android Notification 问题:Invalid notification (no valid small icon)
问题描述与处理策略 1、问题描述 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.my.notifications/com.my.notifications.MainActivity}: java.lang.IllegalArgumentException: Invalid notification (no valid small icon): Notification(chan…...
Python爬虫教程——7个爬虫小案例(附源码)_爬虫实例
本文介绍了7个Python爬虫小案例,包括爬取豆瓣电影Top250、猫眼电影Top100、全国高校名单、中国天气网、当当网图书、糗事百科段子和新浪微博信息,帮助读者理解并实践Python爬虫基础知识。 包含编程资料、学习路线图、源代码、软件安装包等!【…...
Log4j2的Policies详解、SizeBasedTriggeringPolicy、TimeBasedTriggeringPolicy
文章目录 一、Policies二、SizeBasedTriggeringPolicy:基于文件大小的滚动策略2.1、文件达到指定大小就归档 三、TimeBasedTriggeringPolicy:基于时间间隔的滚动策略3.1、验证秒钟归档场景3.2、验证分钟场景3.3、验证小时场景 四、多策略组合使用五、扩展知识5.1、S…...
ES中查询中参数的解析
目录 query中参数match参数match_allmatch:匹配指定参数match_phrase query中其他的参数query_stringprefix前缀查询:wildcard通配符查询:range范围查询:fuzzy 查询: 组合查询bool参数mustmust_notshould条件 其他参数 query中参数 词条查询term:它仅匹配在给定字段…...
学习笔记:使用 pandas 和 Seaborn 绘制柱状图
学习笔记:使用 pandas 和 Seaborn 绘制柱状图 前言 今天在使用 pandas 对数据进行处理并在 Python 中绘制可视化图表时,遇到了一些关于字体设置和 Seaborn 主题覆盖的小问题。这里将学习到的方法和注意事项做个总结,以便之后的项目中可以快…...
【每日学点鸿蒙知识】placement设置top、组件携带自定义参数、主动隐藏输入框、Web设置字体、对话框设置全屏宽
1、popup组件placement设置top没有生效? 可以用offset属性将popup往下边偏移一下 来规避 2、组件携带自定义参数的接口是哪个? 参考链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-universal-attributes-…...
后端开发-Maven
环境说明: windows系统:11版本 idea版本:2023.3.2 Maven 介绍 Apache Maven 是一个 Java 项目的构建管理和理解工具。Maven 使用一个项目对象模型(POM),通过一组构建规则和约定来管理项目的构建…...
自动化办公-合并多个excel
在日常的办公自动化工作中,尤其是处理大量数据时,合并多个 Excel 表格是一个常见且繁琐的任务。幸运的是,借助 Python 语言中的强大库,我们可以轻松地自动化这个过程。本文将带你了解如何使用 Python 来合并多个 Excel 表格&#…...
mavlink移植到单片机stm32f103c8t6,实现接收和发送数据
前言: 好久没更新博客了,这两个月真的是异常的忙,白天要忙着公司里的事,晚上还要忙着修改小论文,一点自己的时间都没有了,不过确确实实是学到了很多东西,对无人机的技术研究也更深了一些。不过好…...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...
vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...
Axure零基础跟我学:展开与收回
亲爱的小伙伴,如有帮助请订阅专栏!跟着老师每课一练,系统学习Axure交互设计课程! Axure产品经理精品视频课https://edu.csdn.net/course/detail/40420 课程主题:Axure菜单展开与收回 课程视频:...
2025年全国I卷数学压轴题解答
第19题第3问: b b b 使得存在 t t t, 对于任意的 x x x, 5 cos x − cos ( 5 x t ) < b 5\cos x-\cos(5xt)<b 5cosx−cos(5xt)<b, 求 b b b 的最小值. 解: b b b 的最小值 b m i n min t max x g ( x , t ) b_{min}\min_{t} \max_{x} g(x,t) bmi…...
