execv 函数的应用

article/2025/7/19 15:13:09

execv函数族:系统来调用某程序模块
    int execl(const char *path, const char *arg, ...);
    int execlp(const char *file, const char *arg, ...);
    int execle(const char *path, const char *arg,
              ..., char * const envp[]);
    int execv(const char *path, char *const argv[]);
    int execvp(const char *file, char *const argv[]);
本质:1、调用此函数时(成功的执行),调用的进程模块会替换现有的进程信息。
元素为NULL
    2、execve才是系统内核函数,上述都会调用此函数来完成的功能
从指定路径下查找    
int execv(const char *path, char *const argv[]);
    path:可执行文件的路径
    argv:就是用户传递的参数  argv[0]  argv[1]  argv[2]注:最后一个数组    
int execl(const char *path, const char *arg, ...);        
    path:可执行文件的路径
    arg:传递的参数(一定要传递NULL)

   execv 通过 argv 来获取 ls -l /  的路径,来替代系统的 /bin/ls 路径.

#include<iostream>
#include<unistd.h>
using namespace std;
//进程:分配空间
int main()
{cout<<"程序开始执行啦,成为进程"<<endl;//需要执行某程序模块  a.out     a.out  a b c  char* argv[5]={"ls","-l","/",NULL};execv("/bin/ls",argv);//argv[0]  argv[1] argv[2]	int i=0;for(i=0;i<100;i++){cout<<i<<endl;}cout<<"进程结束执行"<<endl;
}

  execvp 的"ls"从环境变量中查找某 ls (也可以是其他命令) .

#include<iostream>
#include<sys/types.h>
#include<unistd.h>
#include<sys/wait.h>
using namespace std;
int main()
{
//本进程:1、去执行ls可执行文件   2、求1-100的和cout<<"a.out开始执行啦"<<getpid()<<endl;//执行ls的可执行文件//创建子进程,在子进程执行 模块int pid=fork();if(pid>0)//父进程{wait(NULL);}else if(0==pid)//子进程模块:execv替换进程模块{char* argv[]={"ls","/",NULL};//绝对路径 //	execv("/bin/ls",argv);	//从环境变量中查找某模块  **pexecvp("ls",argv);//execl("/bin/ls","ls","/",NULL);}//父子进程都会执行:子进程中ls替换了子进程的数据区和代码区int i=0,result=0;for(i=0;i<=100;i++){result+=i;}	cout<<"1-100的和为:"<<result<<endl;cout<<"a.out进程执行完成啦\n"<<endl;return 0;
}

   管道,创建一个 pipe(fd); 的管道,创建了一个子进程,先关闭 fd[0] (fd[0]管道的读操作) , 再在 write 中写入到管道 fd[1] (管道的写操作) , 再在子进程中 , 进行对管道 fd[0] 进行 read 操作 , 把写入到管道里的信息读取出来 .

#include<iostream>
#include<sys/types.h>
#include<sys/wait.h>
#include<unistd.h>
#include<string.h>
using namespace std;
int main()
{char str[100]="";
//1创建管道int fd[2];pipe(fd);	
//两个进程int pid=fork();if(pid>0)//父进程输入信息到管道{strcpy(str,"123456789");//关闭读取close(fd[0]);//父亲写入信息到管道中write(fd[1],str,strlen(str));}else if(pid==0)//子进程读取父程序的内容{//关闭写端close(fd[1]);//子进程从管道中读取信息char ch;while(read(fd[0],&ch,1)>0)cout<<ch<<endl;}
}

   实现简单的 shell 的命令  , 可以实现  a.out  -l  data.data   可以将data.data的文件信息读取出来 .

#include<iostream>
#include<string.h>
#include<stdio.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<unistd.h>
using namespace std;
int main()
{char title[]="[***********]$ ";char cmd[255]="";int pid;char* matter[100]={NULL};//100个地址int i=0;//父进程while(1){cout<<title;//输出标题gets(cmd);//输入(以\n 空格字符作为字符串的结符串)//创建子进程pid=fork();if(pid>0){//等待子进程结束wait(NULL);}else if(0==pid){	//解析字符串:matter[i]=strtok(cmd," ");while((matter[++i]=strtok(NULL," "))!=NULL);//替换子进程的信息execvp(matter[0],matter);}}return 0;
}

为你翘课的那一天  花落的那一天
教室的那一间  我怎么看不见
    消失的下雨天  我好想再淋一遍
《晴天》


http://chatgpt.dhexx.cn/article/IsoyDCn8.shtml

相关文章

Linux 0.11-execve函数-35

Linux 0.11-execve函数-35 execve函数读取文件开头 1KB 的数据解析这 1KB 的数据为 exec 结构判断是脚本文件还是可执行文件准备参数空间设置 eip 和 esp&#xff0c;完成摇身一变累了吧&#xff0c;休息会 转载 execve函数 书接上回&#xff0c;上回书咱们说到&#xff0c;进…

Linux内核Hook系统调用execve

资源下载地址&#xff1a;linux内核hook系统调用execve函数-Linux文档类资源-CSDN下载 &#xff08;已在内核为 4.19.0-amd64-desktop版本uos编译通过&#xff0c;并成功达到目的&#xff09; 在Linux系统中&#xff0c;用户层程序无法直接控制系统内核&#xff0c;只能通过系…

执行新程序 execve()

新程序的执行 一&#xff1a;execve() 之所以叫新程序的执行&#xff0c;原因是这部分内容一般发生在fork()和vfork()之后&#xff0c;在子进程中通过系统调用execve()可以将新程序加载到子进程的内存空间。这个操作会丢弃原来的子进程execve()之后的部分&#xff0c;而子进程…

简单的execve流程

本文转载于网络 基于Linux0.11源码来叙述该功能&#xff0c;源码可以在oldlinux.org上自行获取 _sys_execve:lea EIP(%esp),%eax #取堆栈中存放系统调用的返回地址的地址pushl %eax #将该地址入栈call _do_execve #调用do_execve函数addl $4,%esp #丢弃该地址ret这边做了一个很…

Linux0.11系统调用之execve流程解析

Linux0.11系统调用之execve流程解析 前言execve功能介绍execve本质execve系统调用流程总结 前言 本文是基于Linux0.11源码来叙述该功能&#xff0c;源码可以在oldlinux.org上自行获取。 execve功能介绍 execve是用于运行用户程序&#xff08;a.out&#xff09;或shell脚本的…

5.execve()到底干了啥?

导语 很多童鞋有分析阅读Linux源代码的强烈愿望&#xff0c;可是Linux内核代码量庞大&#xff0c;大部分人不知道如何下手&#xff0c;以下是我分析Linux源代码的一些经验&#xff0c;仅供参考&#xff0c;有不实之处请大神指正&#xff01; 1.要想阅读内核首先要进入内核&…

Linux系统编程(再论execve)

文章目录 前言一、execve的第三个参数二、进程空间三、命令行参数规范四、optstring规则的扩展定义总结 前言 本篇文章我们继续来研究一下execve这个系统调用&#xff0c;上篇文章已经讲解了前两个参数的意义了&#xff0c;那么这篇文章就来讲解一下第三个参数的具体含义。 一…

Linux0.11 execve函数(六)

系列文章目录 Linux 0.11启动过程分析&#xff08;一&#xff09; Linux 0.11 fork 函数&#xff08;二&#xff09; Linux0.11 缺页处理&#xff08;三&#xff09; Linux0.11 根文件系统挂载&#xff08;四&#xff09; Linux0.11 文件打开open函数&#xff08;五&#xff09…

C语言 execve()函数使用方法

1.君の名は execve() – 叫做执行程序函数 就像Python中的os.system(cmd)这个函数&#xff0c;我们可以用这个函数来执行我们的shell脚本&#xff0c;单独的shell命令&#xff0c;或者是调用其他的程序&#xff0c;我们的execve()这个函数就和Python中的os.system函数类似&am…

SPSS-因子分析

因子分析 有可能用较少的综合指标分析存在于各变量中的各类信息&#xff0c;而各综合指标之间彼此是不相关的&#xff0c;代表各类信息的综合指标称为因子。定义&#xff1a;因子分析就是用少数几个因子来描述许多指标或因素之间的联系&#xff0c;以较少几个因子反映原资料的 …

spss进行主成分分析

什么是主成分分析 简而概之, 就是一组数据受太多因素影响, 选出几个能代表他们的因素,并进行线性组合得到一组比原维度小的因素组合, 作为新的因素集 用spss操作 随手拿出一组数据 1.数据统一标准化 因为我们得到的原始数据大小,类型不一, 一起分析会不准确, 所以将数据全部…

实用干货!因子分析超全步骤总结

因子分析是统计数据分析方法之一&#xff0c;因子分析包括探索性因子分析和验证性因子分析。本文主要讨论探索性因子分析。 一、研究背景 关于工作满意度有14个问题&#xff0c;调研得到215份问卷结果。希望通过因子分析&#xff0c;用少量因子反映14个题目的信息&#xff0c;…

NLP | 朴素贝叶斯法的学习与分类

朴素贝叶斯法的学习与分类 《统计学习方法》李航第四章 1、概述 书上对朴素贝叶斯的描述如下&#xff1a; 朴素贝叶斯法时基于贝叶斯定理与特征条件独立假设的分类方法。对于给定的训练数据集&#xff0c;首先基于特征条件独立假设学习输入/输出的联合概率分布&#xff1b;然…

标定相机参数-张正友方法

一、实验原理 1.计算外参 设三维世界坐标的点为M=[X,Y,Z,1]T,二维相机平面像素坐标为m=[u,v,1]T,所以标定用的棋盘格平面到图像平面的单应性关系为: sm=A[R,t]M 其中 不妨设棋盘格位于Z = 0,定义旋转矩阵R的第i列为 ri, 则有: 令H=[h1 h2 h3]=λA[r1 r2 t] 于是空间到图…

《统计学习方法》——朴素贝叶斯法

引言 朴素贝叶斯法(Naive Bayes)是基于贝叶斯定理与特征条件独立假设的分类方法。朴素贝叶斯法实现简单&#xff0c;学习与预测的效率都很高&#xff0c;是一种常用的方法。 这一章需要大量的概率论知识&#xff0c;忘记了的同学建议先参阅人工智能数学基础之概率论。 朴素贝…

数据挖掘十大算法之 naïve Bayes

朴素贝叶斯法是基于贝叶斯定理和特征条件独立假设的分类方法。朴素贝叶斯法实现简单&#xff0c;学习与预测的效率都很高&#xff0c;被广泛应用于文本分类、垃圾邮件过滤、自然语言处理等场景。下面我们来介绍贝叶斯定理&#xff0c;在介绍贝叶斯定理之前&#xff0c;先介绍下…

专题:深度神经网络基本问题的原理详细分析和推导

文章目录 **写在最前面****1 神经网络算法的直观了解****1.1 神经网络过程描述**&#xff1a;**1.2 神经网络相关的几个问题****1.2.1 表征假设和激活函数** **1.2.2 结构设计(Architecture Design)****1.2.3 代价函数(Cost Function)和优化目标(Optimization objective)****1.…

第四章 朴素贝叶斯法

文章目录 朴素贝叶斯法的学习与分类基本方法数据定义学习联合概率分布如何求出条件概率分布&#xff1f;如何分类&#xff1f; 后验概率最大化的含义 朴素贝叶斯的参数估计法极大似然估计学习分类算法贝叶斯估计 朴素贝叶斯法&#xff08;与贝叶斯估计是不同的概念&#xff09;…

GAN生成对抗式神经网络数学推导

由上面一篇文章我们已经知道了&#xff0c;如果我们从真实数据分布里面取n个样本&#xff0c;根据给定样本我们可以列出其出现概率的表达式&#xff0c;那么生成这N个样本数据的似然(likelihood)就是 l ( θ ) ∏ i 1 N p ( x i ∣ θ ) l ( \theta ) \prod _ { i 1 } ^ { …

《统计学习方法》学习笔记(三)之 朴素贝叶斯法

朴素贝叶斯法 总述 朴素贝叶斯法是基于贝叶斯定理与特征条件独立性假设的分类方法。对于给定的训练数据集&#xff0c;首先基于特征独立性假设学习输入/输出的联合概率分布&#xff1b;然后基于此模型&#xff0c;对给定的输入 x x x&#xff0c;利用贝叶斯定理求出后验概率最…