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并不只是这样,还能往除了上述三个以外的地方读写,这个就在下一篇进行详解了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/498289.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#编写的金鱼趣味小应用 - 开源研究系列文章

今天逛网,在GitHub中文网上发现一个源码,里面有这个金鱼小应用,于是就下载下来,根据自己的C#架构模板进行了更改,最终形成了这个例子。 1、 项目目录; 2、 源码介绍; 1) 初始化; 将样…

cloudns二级免费域名python更新ipv6 dns记录

没找到api,托管到cloudflare也不行。就只能写代码了(只写了更新和添加单条ipv6记录) 需要修改的地方 请求头的cookies填自己的 data里的zone填自己的 import requests from lxml import etree host#子域名 cookies填自己的 zone自己域名的 …

机器学习作业 | 泰坦尼克号生存的预测任务

泰坦尼克号生存的预测任务 学校作业,我来水一水 环境:pycharmanaconda虚拟环境 文章目录 泰坦尼克号生存的预测任务0.环境搭建参考:1 目的与要求2 任务背景3 任务简介4 模型介绍1.决策树(Decision Tree)2.朴素贝叶斯…

【pytorch】conda安装pytorch

Step 1 打开官网: https://pytorch.org/get-started/locally/ 进行选择对应版本: 复制图中命令执行。 Step 2 验证是否安装成功。 执行: import torch print(torch.cuda.is_available()) print(torch.cuda.device_count()) print(torch.…

项目开发实践——基于SpringBoot+Vue3实现的在线考试系统(四)

文章目录 一、管理员角色功能实现1、添加教师功能实现1.1 页面设计1.2 前端功能实现1.3 后端功能实现1.4 效果展示2、教师管理功能实现2.1 页面设计2.2 前端功能实现2.3 后端功能实现2.3.1 后端查询接口实现2.3.2 后端编辑接口实现2.3.3 后端删除接口实现2.4 效果展示二、代码下…

基于16QAM的载波同步和定时同步性能仿真,采用四倍采样,包括Costas环和gardner环

目录 1.算法仿真效果 2.算法涉及理论知识概要 3.MATLAB核心程序 4.完整算法代码文件获得 1.算法仿真效果 matlab2022a仿真结果如下(完整代码运行后无水印): 仿真操作步骤可参考程序配套的操作视频。 2.算法涉及理论知识概要 载波同步是…

新服务器ubuntu系统相关操作

1、查看驱动:驱动版本535.216.01能够支持cuda12.2,下面直接使用默认安装的cuda。 2、赋予用户管理员权限。 首先有超级用户(root)权限来编辑 /etc/sudoers 文件,visudo 是一个命令,用于安全地编辑 /etc/sudoers 文件。运行: sudo visudo 在 visudo 编辑器中,找到类似…

2、Bert论文笔记

Bert论文 1、解决的问题2、预训练微调2.1预训练微调概念2.2深度双向2.3基于特征和微调(预训练下游策略) 3、模型架构4、输入/输出1.输入:2.输出:3.Learned Embeddings(学习嵌入)1. **Token Embedding**2. **Position Embedding**3…

python 渗透开发工具之SQLMapApi Server不同IP服务启动方式处理 解决方案SqlMapApiServer外网不能访问的情况

目录 说在前面 什么是 SQLMapAPI 说明 sqlmapApi能干什么 sqlmapApi 服务安装相关 kali-sqlmap存放位置 正常启动sqlmap-api server SqlMapApi-Server 解决外网不能访问情况 说在前面 什么是sqlmap 这个在前面已经说过了,如果这个不知道,就可以…

操作系统论文导读(八):Schedulability analysis of sporadic tasks with multiple criticality specifications——具有多个

Schedulability analysis of sporadic tasks with multiple criticality specifications——具有多个关键性规范的零星任务的可调度性分析 目录 一、论文核心思想 二、基本定义 2.1 关键性指标 2.2 任务及相关参数定义 2.3 几个基础定义 三、可调度性分析 3.1 调度算法分…

技术速递|调用异步功能 - WinForms 在 .NET 9 中的未来发展

作者: Klaus Loeffelmann 排版:Alan Wang 随着 .NET 的不断发展,WinForms 开发者可用的工具也在不断进步,这使得开发更加高效且应用响应更迅速。在 .NET 9 中,我们很高兴引入了一系列新的异步 API,这些 API…

Docker-构建自己的Web-Linux系统-镜像webtop:ubuntu-kde

介绍 安装自己的linux-server,可以作为学习使用,web方式访问,基于ubuntu构建开源项目 https://github.com/linuxserver/docker-webtop安装 docker run -d -p 1336:3000 -e PASSWORD123456 --name webtop lscr.io/linuxserver/webtop:ubuntu-kde登录 …

【每日学点鸿蒙知识】箭头函数、Watch状态变量、H5获取定位数据、前后台切换、长按事件

【每日学点鸿蒙知识】箭头函数、Watch状态变量、H5获取定位数据、前后台切换、长按事件 1、HarmonyOS confirm: () > void () > { }? confirm: () > void () > { }是什么格式。 是一个箭头函数,它的类型是 () > void,表示…

【人工智能机器学习基础篇】——深入详解监督学习之模型评估:掌握评估指标(准确率、精确率、召回率、F1分数等)和交叉验证技术

深入详解监督学习之模型评估 在监督学习中,模型评估是衡量模型性能的关键步骤。有效的模型评估不仅能帮助我们理解模型在训练数据上的表现,更重要的是评估其在未见数据上的泛化能力。本文将深入探讨监督学习中的模型评估方法,重点介绍评估指…

如何使用React,透传各类组件能力/属性?

在23年的时候,我主要使用的框架还是Vue,当时写了一篇“如何二次封装一个Vue3组件库?”的文章,里面涉及了一些如何使用Vue透传组件能力的方法。在我24年接触React之后,我发现这种扩展组件能力的方式有一个专门的术语&am…

点进CSS选择器

CSS 1.直接在标签的style属性进行设置(行内式) //写在数据单元格td标签内的stytle&#xff0c;设置color颜色和font-size字体大小&#xff1b; <td rowspan"3" style"color: red;font-size: 12px;">Web技术与应用</td> 2.写在head标签中的…

Python基于卷积神经网络的车牌识别系统开发与实现

1. 简介 车牌识别是人工智能在交通领域的重要应用&#xff0c;广泛用于高速违章检测、停车场管理和智能交通系统等场景。本系统通过基于卷积神经网络&#xff08;CNN&#xff09;的深度学习算法&#xff0c;结合 Python 和 MySQL 实现车牌的快速识别与管理。 系统特点&#x…

【PDF物流单据提取明细】批量PDF提取多个区域内容导出表格或用区域内容对文件改名,批量提取PDF物流单据单号及明细导出表格并改名的技术难点及小节

相关阅读及下载&#xff1a; PDF电子物流单据&#xff1a; 批量PDF提取多个区域局部内容重命名PDF或者将PDF多个局部内容导出表格&#xff0c;具体使用步骤教程和实际应用场景的说明演示https://mp.weixin.qq.com/s/uCvqHAzKglfr40YPO_SyNg?token720634989&langzh_CN扫描…

运行python程序报错 undefined symbol: ffi_type_uint32 的参考解决方法

文章目录 写在前面一、问题描述二、解决方法参考链接 写在前面 自己的测试环境&#xff1a; Ubuntu20.04 ROS-Noetic 一、问题描述 运行 python 程序出现如下问题&#xff1a; Traceback (most recent call last):File "<string>", line 1, in <module&…

鱼眼相机模型与去畸变实现

1.坐标系说明 鱼眼相机模型涉及到世界坐标系、相机坐标系、图像坐标系、像素坐标系之间的转换关系。对于分析鱼眼相机模型&#xff0c;假定世界坐标系下的坐标点,经过外参矩阵的变换转到相机坐标系&#xff0c;相机坐标再经过内参转换到像素坐标&#xff0c;具体如下 进一步进…