linux-进程-execl族函数

exec函数的作用:

        我们用fork函数创建新进程后,经常会在新进程中调用exec函数去执行另外一个程序。当进程调用exec函数时,该进程被完全替换为新程序。因为调用exec函数并不创建新进程,所以前后进程的ID并没有改变。

简单来说就是,子程序可以在不影响父程序下,执行别的程序

功能:

        在调用进程内部执行一个可执行文件。可执行文件既可以是一个二进制文件,也可以是任何linux下可执行的脚本文件。

函数族:

        分别是:execl,execlp,execle,execv,execvp,execvpe
函数原型:

#include <unistd.h>  //exec函数族的头文件
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. 这些函数如果调用成功则加载新的程序从启动代码开始执行,不再返回;
  2. 如果调用出错则返回-1;
  3. 所以exec函数只有出错的返回值而没有成功的返回值

快速分辨不同函数方法:

l(list) :        表示参数采用列表;
v(vector) : 参数用数组;
p(path) :    有p自动搜索环境变量PATH;
e(env) :     表示自己维护环境变量;(深入使用Linux再学习)

1.execl使用:

代码:

实现子进程ls功能;键入whereis ls 查找ls位置,如图:

代码:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/wait.h>int main()
{pid_t pid = fork();if(pid == 0){//child processprintf("child pid:%d\n",getpid());execl("/bin/ls","ls","-a","-l",NULL);//      printf("child pid:%d",getpid());//exit child processexit(0);}//father processwait(NULL);printf("i am father[%d] ,do my thing ,不会被子进程的[%d]execl函数影响\n",getpid(),pid);return 0;
}

结果:

execl具体解释:这里引用呋喃吖_Leetcode,c++,Linux-CSDN博客

推荐看她的,写的很清楚

这里介绍一下perror函数

1、作用:
打印系统错误信息

2、原型

#include <stdio.h>
void perror(const char *s);
#include <errno.h>

3、代码:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

int main()
{
        int fd;
        fd=open("./file", O_RDWR);//打开文件file,读写方式
        if(fd < 0){
            printf("open failure\n");
            perror("why");//打印失败的原因
        }
        close(fd);
        return 0;
}

 

运行结果:
//我的目录下是没有文件file的

open failure
why: No such file or directory
 

linux下data与ps指令同理

2.execlp函数

execlp和execl的区别在于,execlp在第一个参数时候,不需要全路径,只需要写上执行命令的文件名即可,表示你需要执行谁,往后的参数也就是和execl的传参一样。

p为环境变量:使用时需要调用环境变量,方法如下:

pwd:查看当前路径

echo $PATH:显示当前PATH环境变量,该变量的值由一系列以冒号分隔的目录名组成。
export PATH=$PATH:路径名:环境变量的配置

代码:这里引用上述作者的:

#include<stdio.h>
#include<unistd.h>//使用fork,exec函数
#include<sys/wait.h>//使用waitpid
#include<stdlib.h> //使用exit的头文件
int main()
{if(fork() == 0){// execl("/usr/bin/ls","ls","-a","-l",NULL);execlp("ls","ls","-a","-l",NULL); //等价上面的execl()//虽然这里的第一个参数和第二个参数都一样,但是含义不一样;//第一个参数表示iexeclp函数要执行命令的路径文件名,//第二个参数表示execlp在命令行上如何执行该命令exit(1);}int waitRet = waitpid(-1,NULL,0); //阻塞等待所有子进程结束if(waitRet< 0){perror("wait error\n");}printf("parent wait child success\n");return 0;
}

结果:

3.execv函数

与execl函数没啥区别,就是传参的时候使用数组,而不是列出来

代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
//函数原型:int execl(const char *path, const char *arg, ...);int main(void)
{printf("this is system date\n");char *argv[]={"ps",NULL,NULL};//数组形式if(execv("/bin/ps",argv) == -1){printf("execl failed!\n");      perror("why");}printf("after execl\n");return 0;
}

4.execvp可以类比execlp

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

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

相关文章

如何使用聊天GPT自定义说明

推荐&#xff1a;使用 NSDT场景编辑器 快速搭建3D应用场景 OpenAI ChatGPT正在席卷全球。一周又一周&#xff0c;更新不断提高您可以使用这种最先进的语言模型做什么的标准。 在这里&#xff0c;我们深入研究了OpenAI最近在ChatGPT自定义指令上发布的公告。此功能最初以测试版…

第11篇:ESP32vscode_platformio_idf框架helloworld点亮LED

第1篇:Arduino与ESP32开发板的安装方法 第2篇:ESP32 helloword第一个程序示范点亮板载LED 第3篇:vscode搭建esp32 arduino开发环境 第4篇:vscodeplatformio搭建esp32 arduino开发环境 ​​​​​​第5篇:doit_esp32_devkit_v1使用pmw呼吸灯实验 第6篇:ESP32连接无源喇叭播…

常见面试题记录

记录下java的常见面试题 文章目录 记录如下 记录如下 记录如下 hashmap原理lock原理synchronized锁优化过程线程状态以及创建方式线程池&#xff08;执行过程&#xff0c;参数&#xff0c;淘汰策略&#xff09;jvm&#xff08;gc优化和OOM&#xff09;volatile&#xff08;可见…

智慧公厕是对智慧城市“神经末梢”的有效激活,公共厕所实现可感知、可视化、可管理、可控制

在当今科技迅速发展的时代&#xff0c;智慧城市已经成为人们关注的热点话题。作为城市基础设施的重要组成部分&#xff0c;公共厕所也逐渐融入到智慧城市的建设中&#xff0c;成为城市管理的焦点之一。智慧公厕作为智慧城市的“神经末梢”&#xff0c;通过可感知、可视化、可管…

tcpdump 如何使用

tcpdump 是一个在Unix和类Unix系统上运行的网络抓包工具&#xff0c;它用于捕获网络流量并将其转储到文件中以供后续分析。tcpdump非常强大&#xff0c;可以用于监控、调试和分析网络通信&#xff0c;用于排查网络问题以及安全审计。以下是关于如何使用tcpdump的详细介绍&#…

单片机C语言实例:13、看门狗

一、看门狗溢出测试 程序实例1&#xff1a; #include<reg52.h>sfr WDTRST 0xA6; sbit key P3^1; /*------------------------------------------------喂狗 ------------------------------------------------*/ void Rst_Watchdog( void ) {WDTRST 0x1E…

【文末送书】Matlab科学计算

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和技术。关…

遥感图像应用:在低分辨率图像上实现洪水损害检测(迁移学习)

本文是上一篇关于“在低分辨率图像上实现洪水损害检测”的博客的延申。 代码来源&#xff1a;https://github.com/weining20000/Flooding-Damage-Detection-from-Post-Hurricane-Satellite-Imagery-Based-on-CNN/tree/master 数据储存地址&#xff1a;https://github.com/Jef…

CSS宽度问题

一、魔法 为 DOM 设置宽度有哪些方式呢&#xff1f;最常用的是配置width属性&#xff0c;width属性在配置时&#xff0c;也有多种方式&#xff1a; widthmin-widthmax-width 通常当配置了 width 时&#xff0c;不会再配置min-width max-width&#xff0c;如果将这三者混合使…

MySql 变量

1.系统变量 1.1 系统变量分类 变量由系统定义&#xff0c;不是用户定义&#xff0c;属于 服务器 层面。系统变量分为全局系统变量&#xff08;需要添加 global 关键字&#xff09;以及会话系统变量&#xff08;需要添加 session 关键字&#xff09;&#xff0c;有时也把全局系…

Web安全——Web安全漏洞与利用上篇(仅供学习)

SQL注入 一、SQL 注入漏洞1、与 mysql 注入的相关知识2、SQL 注入原理3、判断是否存在注入回显是指页面有数据信息返回id 1 and 114、三种 sql 注释符5、注入流程6、SQL 注入分类7、接受请求类型区分8、注入数据类型的区分9、SQL 注入常规利用思路&#xff1a;10、手工注入常规…

CSDN每日一练 |『小艺照镜子』『Ctrl+X,Ctrl+V』『括号上色』2023-09-11

CSDN每日一练 |『小艺照镜子』『Ctrl+X,Ctrl+V』『括号上色』2023-09-11 一、题目名称:小艺照镜子二、题目名称:Ctrl+X,Ctrl+V三、题目名称:括号上色一、题目名称:小艺照镜子 时间限制:1000ms内存限制:256M 题目描述: 已知字符串str。 输出字符串str中最长回文串的长度…

MySQL的权限管理与远程访问

MySQL的权限管理 1、授予权限 授权命令&#xff1a; grant 权限1,权限2,…权限n on 数据库名称.表名称 to 用户名用户地址 identified by ‘连接口令’; 该权限如果发现没有该用户&#xff0c;则会直接新建一个用户。 比如 grant select,insert,delete,drop on atguigudb.…

驱动开发,stm32mp157a开发板的led灯控制实验

1.实验目的 编写LED灯的驱动&#xff0c;在应用程序中编写控制LED灯亮灭的代码逻辑实现LED灯功能的控制&#xff1b; 2.LED灯相关寄存器分析 LED1->PE10 LED1亮灭&#xff1a; RCC寄存器[4]->1 0X50000A28 GPIOE_MODER[21:20]->01 (输出) 0X50006000 GPIOE_ODR[10]-&g…

文件操作(个人学习笔记黑马学习)

C中对文件操作需要包含头文件<fstream > 文件类型分为两种: 1.文本文件&#xff1a;文件以文本的ASCII码形式存储在计算机中 2.二进制文件&#xff1a;文件以文本的二进制形式存储在计算机中&#xff0c;用户一般不能直接读懂它们 操作文件的三大类: 1.ofstream: 写操作 …

SpringBoot项目启动时预加载

SpringBoot项目启动时预加载 Spring Boot是一种流行的Java开发框架&#xff0c;它提供了许多方便的功能来简化应用程序的开发和部署。其中一个常见的需求是在Spring Boot应用程序启动时预加载一些数据或执行一些初始化操作。 1. CommandLineRunner 和 ApplicationRunner Spri…

CentOS Python环境搭建

安装依赖 yum install -y libffi-devel wget gcc make zlib-devel openssl openssl-devel ncurses-devel openldap-devel gettext bzip2-devel xz-devel下载安装包 wget "https://www.python.org/ftp/python/3.9.10/Python-3.9.10.tar.xz" 编译安装 # 3.1、解压安装包…

Python的常用函数有哪些,作用是什么?

Python是一种高级编程语言&#xff0c;广泛用于数据科学、人工智能、网络编程等领域。 Python提供了许多内置函数和标准库&#xff0c;可以完成各种任务&#xff1a; 1、print()函数&#xff1a;将文本输出到控制台。可以将字符串、数字和变量等输出到控制台。 2、input()函…

Nginx 配置错误导致漏洞

文章目录 Nginx 配置错误导致漏洞1. 环境启动2. CRLF注入漏洞2.1 漏洞描述2.2 漏洞原理2.3 漏洞利用2.4 修复建议 3. 目录穿越漏洞3.1 漏洞描述3.2 漏洞原理3.3 漏洞利用3.4 修复建议 4. add_header被覆盖4.1 漏洞描述4.2 漏洞原理4.3 漏洞利用4.4 修复建议 Nginx 配置错误导致…

机器学习 实战系列 总目录

1、机器学习实战-系列教程1&#xff1a;线性回归入门教程&#xff08;项目实战、原理解读、源码解读&#xff09; 机器学习实战-系列教程1&#xff1a;线性回归入门教程&#xff08;项目实战、原理解读、源码解读&#xff09; 2、机器学习实战-系列教程2&#xff1a;手撕线性回…