lv5 嵌入式开发-2 exec函数族

news2024/11/24 6:49:24

目录

1 进程 – exec函数族

1.1 exec函数族特点 

1.2 进程 – execl / execlp使用方法

1.3 进程 – execv / execvp

2 进程 – system

3 exec族要点演示


掌握:exec函数族、system

1 进程 – exec函数族

执行程序,通孔ps -elf发现,父进程是bash。这意味着该进程是由一个 bash shell 中启动的。

1.1 exec函数族特点 

  • 进程调用exec函数族执行某个程序
  • 进程当前内容被指定的程序替换(重要特点)
  • 实现让父子进程执行不同的程序(fork父子进程执行的是一个程序,下面是操作方法即原理)

       -父进程创建子进程

       -子进程调用exec函数族

       -父进程不受影响

1.2 进程 – execl / execlp使用方法

#include  <unistd.h>
int execl(const char *path, const char *arg, …);
int execlp(const char *file, const char *arg, …);   //区别是不需要完整路径
  • 成功时执行指定的程序;失败时返回EOF
  •  path   执行的程序名称,包含路径  
  • arg…  传递给执行的程序的参数列表  
  • file   执行的程序的名称,在PATH中查找(需要环境变量中添加

示例1:

执行ls命令,显示/etc目录下所有文件的详细信息

if(execl(“/bin/ls”, “ls”, “-a”, “-l”, “/etc”, NULL) < 0){
    perror(“execl”);
}  
  
if(execlp(“ls”, “ls”, “-a”, “-l”, “/etc”, NULL) < 0){   
    perror(“execlp”);
}  

0号参数即使命令本身,后面再加其他参数

最后参数必须加NULL空指针

#include <stdio.h>
#include <unistd.h>

int main(){

   printf("before exec\n");
   if(execlp("ls","ls","-a","-l","./",NULL)<0){
	perror("execl");
   }


}

1.3 进程 – execv / execvp

#include  <unistd.h>
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);

成功时执行指定的程序;失败时返回EOF  

arg… 封装成指针数组的形式

示例:

执行ls命令,显示/etc目录下所有文件的详细信息   

char  *arg[] = {“ls”, “-a”, “-l”, “/etc”, NULL};  
   
if(execv(“/bin/ls”, arg) < 0)
{      
    perror(“execv”);   
}       

if(execvp(“ls”, arg) < 0) 
{      
    perror(“execvp”);   
}  
#include <stdio.h>
#include <unistd.h>

int main(){
   char *agv[] = {"ls","-a","-l","./",NULL};

   if(execv("/bin/ls",agv)<0){
	perror("execv");
   }


}


linux@linux:~/Desktop$ ./a.out 
total 24
drwxr-xr-x  2 linux linux 4096 Sep 18 10:32 .
drwxr-xr-x 22 linux linux 4096 Sep 18 10:32 ..
-rwxrwxr-x  1 linux linux 7330 Sep 18 10:32 a.out
-rw-rw-r--  1 linux linux  184 Sep 16 11:24 fork.c
-rw-rw-r--  1 linux linux  157 Sep 18 10:32 test.c
linux@linux:~/Desktop$ ls -a -l ./
total 24
drwxr-xr-x  2 linux linux 4096 Sep 18 10:32 .
drwxr-xr-x 22 linux linux 4096 Sep 18 10:32 ..
-rwxrwxr-x  1 linux linux 7330 Sep 18 10:32 a.out
-rw-rw-r--  1 linux linux  184 Sep 16 11:24 fork.c
-rw-rw-r--  1 linux linux  157 Sep 18 10:32 test.c
linux@linux:~/Desktop$ 

2 进程 – system

#include <stdlib.h>
int system(const char *command);

成功时返回命令command的返回值;失败时返回EOF  

当前进程等待command执行结束后才继续执行

其原理也是fork的子进程,执行完不会被替代

示例;

#include <stdio.h>
#include <stdlib.h>

int main(){
	system("ls -a -l ./");
}

3 exec族要点演示

示例

//a.out
#include <stdio.h>
int main(int argc,char **argv){    
    printf("hello world %s,%s\n",argv[1],argv[2]);
}

#include <stdio.h>
#include <unistd.h>

//test
#include <stdio.h>
#include <unistd.h>

int main(){

	printf("before exec\n");
	if(execlp("./a.out","./a.out","abc","def",NULL)<0){
		perror("execv");
	}
    printf("after exec\n");
		  	
}

printf没有执行,因为a.out把程序全部替换了。

如果想不被替换?

可以写一个子程序,使用exec

#include <stdio.h>
#include <unistd.h>

int main(){
   pid_t pid;
   printf("before exec\n");
   pid = fork();
   if(pid==0){
   	if(execl("/bin/ls","-a","-l","./",NULL)<0){
		perror("execl");
   	}
   }
   	printf("after execl\n");

}

printf被打印出来了。 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

springcloud3 分布式事务-产生原因的模拟1

一 分布式事务 1.1 分布式事务产生条件 分布式事务&#xff0c;就是指不是在单个服务或单个数据库架构下&#xff0c;产生的事务&#xff0c;例如&#xff1a; 1.跨数据源的分布式事务 2.跨服务的分布式事务 3.综合情况 二 案例操作 2.1 原理架构 订单的创建、库存的扣…

1万多关数独逻辑游戏ACCESS\EXCEL数据库

数独盘面是个九宫&#xff0c;每一宫又分为九个小格。在这八十一格中给出一定的已知数字和解题条件&#xff0c;利用逻辑和推理&#xff0c;在其他的空格上填入1-9的数字。使1-9每个数字在每一行、每一列和每一宫中都只出现一次&#xff0c;所以又称“九宫格”。 每一关存储了8…

【树】B树与B+树

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

计算机视觉与深度学习-经典网络解析-VGG-[北邮鲁鹏]

目录标题 VGG参考VGG网络贡献使用尺寸更小的$3 \times 3$卷积串联来获得更大的感受野放弃使用$11 \times 11$和$5 \times 5$这样的大尺寸卷积核深度更深、非线性更强&#xff0c;网络的参数也更少&#xff1b;去掉了AlexNet中的局部响应归一化层(LRN)层。 网络结构主要改进输入…

车辆检测:An Efficient Wide-Range Pseudo-3D Vehicle Detection Using A Single Camera

论文作者&#xff1a;Zhupeng Ye,Yinqi Li,Zejian Yuan 作者单位&#xff1a;Xian Jiaotong University 论文链接&#xff1a;http://arxiv.org/abs/2309.08369v1 项目链接&#xff1a;https://www.youtube.com/watch?v1gk1PmsQ5Q8 内容简介&#xff1a; 1&#xff09;方…

GE D20 EME 10BASE-T 控制主板模块

GE D20 EME 控制主板模块通常用于工业自动化和控制系统中&#xff0c;特别是在需要网络连接和通信功能的应用领域。以下是一些可能适用于该模块的应用领域&#xff1a; 工业自动化&#xff1a;GE D20 EME 控制主板模块可用于各种工业自动化应用&#xff0c;包括生产线控制、设备…

【前端知识】Three 学习日志(七)—— 动画渲染循环

Three 学习日志&#xff08;七&#xff09;—— 动画渲染循环 一、旋转动画 // 渲染函数 function render() {renderer.render(scene, camera); //执行渲染操作mesh.rotateY(0.01);//每次绕y轴旋转0.01弧度requestAnimationFrame(render);//请求再次执行渲染函数render&#…

【LQR】离散代数黎卡提方程的求解,附Matlab/python代码(笔记)

LQR的核心是设计QRN&#xff0c;并求解对应的黎卡提方程 对于连续状态空间方程系统&#xff0c;先求连续LQR后离散 和 先离散后求离散LQR方程 的结果 是不一样的 1.离散代数黎卡提方程 注&#xff1a;LQR算法中含N项 离散系统&#xff1a; 在matlab里有现成的函数dlqr()&…

【C语言】可变参数列表详解

可变参数列表 一、可变参数列表的使用1、可变参数列表的形式2、可变参数列表的提取3、使用演示4、利用可变参数实现一个简单的日志打印功能 二、可变参数列表的原理1、原理的讲解2、原理的证明 一、可变参数列表的使用 1、可变参数列表的形式 有时我们在使用C语言时可能会碰到…

解决RequestParam.value() was empty on parameter 0

在网上查询很多种方式&#xff0c;都解决不了问题&#xff0c;比如&#xff1a; 在RequestParam RequestBody注解 解决办法:在RequestParam中的name加上对应参数 如 : RequestParam( name "name" ) RequestBody也是同理 最后解决的办法&#xff0c;是发现mave…

【Linux】nohub指令--终端退出后命令仍旧执行

文章目录 0、背景1、作用2、语法3、用法演示4、关于2>&1 0、背景 Shell中&#xff0c;执行一个持续进行的指令&#xff0c;会"霸屏"&#xff0c;即你想再执行其他指令&#xff0c;要么重开个shell终端&#xff0c;要么退出这个执行。 1、作用 nohub&#x…

vue 把echarts封装成一个方法 并且从后端读取数据 +转换数据格式 =动态echarts 联动echarts表

1.把echarts 在 methods 封装成一个方法mounted 在中调用 折线图 和柱状图 mounted调用下边两个方法 mounted(){//最早获取DOM元素的生命周期函数 挂载完毕console.log(mounted-id , document.getElementById(charts))this.line()this.pie()},methods里边的方法 line() {// …

苹果麻烦了,全球没有消费者愿意接受印度制造的iPhone

据外媒报道指印度制造的iPhone良率只有一半&#xff0c;以至于发出的货被质量工程师打回一半&#xff0c;由此引发欧洲消费者的抗拒&#xff0c;为安抚欧洲消费者&#xff0c;苹果表示欧洲市场的iPhone15将全数由中国制造供应&#xff0c;而印度制造的iPhone将在印度市场销售以…

基于python的urllib 库抓取网站上的图片

最近写了个爬虫实例&#xff0c;有python环境的话就可以直接运行了。 运行效果是这样的&#xff1a; 完整代码如下&#xff1a; import urllib import urllib.request import re import random import time import os #目标网址: imagePath"https://pic.netbian.com&quo…

JVM对象的创建过程、内存分配、内存布局、访问定位等问题详解

对象 内存分配的两种方式 指针碰撞 适用场合&#xff1a;堆内存规整&#xff08;即没有内存碎片&#xff09;的情况下。 原理&#xff1a;用过的内存全部整合到一边&#xff0c;没有用过的内存放在另一边&#xff0c;中间有一个分界指针&#xff0c;只需要向着没用过的内存…

计算机视觉与深度学习-卷积神经网络-卷积图像去噪边缘提取-卷积-[北邮鲁鹏]

目录标题 参考学习链接卷积的定义卷积的性质叠加性平移不变性交换律结合律分配律标量 边界填充边界填充方法 - 常数填充最常用常数填充零填充&#xff08;zero padding&#xff09;拉伸镜像 卷积示例单位脉冲核无变化平移平滑锐化 卷积核平均卷积核高斯卷积核高斯卷积核定义高斯…

智能金融决策策略,规则引擎在大数据金融行业的实战案例

在金融风控场景中&#xff0c;规则引擎是一个核心风险管理的利器&#xff0c;它预先设定一系列规则设定&#xff0c;用于便捷的评估和处理各种交易、客户行为或其他需要自动化决策、计算、推理判断的情况。 以下是一个详细的示例&#xff0c;说明规则引擎在金融风控中的使用。 …

智能工厂的产业前景如何?

智能工厂的产业前景相当光明&#xff0c;并且正在迅速发展。智能工厂&#xff0c;也称为工业 4.0 或第四次工业革命&#xff0c;代表了先进技术和数据驱动自动化推动的制造和工业流程的重大转变。以下是智能工厂产业前景的一些关键方面&#xff1a; 1.提高效率&#xff1a;智能…

OSCP系列靶场-Intermediate-BTRSys2.1保姆级

OSCP系列靶场-Intermediate-BTRSys2.1 目录 OSCP系列靶场-Intermediate-BTRSys2.1总结准备工作信息收集-端口扫描目标开放端口收集目标端口对应服务探测 信息收集-端口测试21-FTP端口的信息收集21-FTP版本版本信息与MSF利用21-FTP端口匿名登录测试(成功)21-FTP端口-文件GET收集…

C++中的深拷贝和浅拷贝介绍

对于基本类型的数据以及简单的对象,它们之间的拷贝非常简单,就是按位复制内存。例如: class Base{public:Base(): m_a(0), m_b(0){ }Base(int a, int b): m_a(a), m_b(b){ }private:int m_a;int m_b;};int main(){int a = 10;int b = a; //拷贝Base obj1(10, 20);Base obj2…