返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言进程程序替换的实现详解
  • 763
分享到

C语言进程程序替换的实现详解

2024-04-02 19:04:59 763人浏览 安东尼
摘要

目录进程程序替换替换原理替换函数替换函数名称助记进程程序替换 替换原理 使用fork创建子进程后执行的是和父进程相同的程序,但是那样并没有多大的意义,子进程往往会“程序替

进程程序替换

替换原理

使用fork创建子进程后执行的是和父进程相同的程序,但是那样并没有多大的意义,子进程往往会“程序替换” 去执行另一个程序。程序替换的特点就是:不创建新的进程,仅仅替换掉该进程的代码和数据。

替换函数

#include <unistd.h>
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[]);
int execve(const char *path, char *const argv[], char* const envp[]);
//path表示全路径,file表示文件名
//可变参数列表,在终端上怎么写的,就怎么传参

注意:可变参数列表的参数个数是未确定的,如果你确定好自己的参数个数了,则以NULL结尾,表示就传这么多个参数了

假设程序替换成ls

execl("/usr/bin/ls", "ls", "-l", "-a", NULL)

使用execl据个例子

#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <stdlib.h>
int main(void)
{
  if(fork() == 0)
{
 //child
printf("i am child process:%d\n",getpid());
execl("/usr/bin/ls", "ls", "-l", NULL); //可变参数列表以NULL结尾,表示参数就是这么多
}
waitpid(-1, NULL, 0); //等待子进程
printf("123\n");
printf("1234\n");
printf("12345\n");
printf("123456\n");
printf("1234567\n");
return 0;
}                                                                                                                                                                    

现象:

可以看到子进程只执行了ls -l指令,而父进程还是执行自己的。

以上函数:

  • 如果调用成功,则加载新的程序集从启动代码开始执行,不返回
  • 如果调用失败,则返回-1
  • exec系列的函数只有调用失败才会有返回值,没有成功的返回值

替换函数名称助记

以上的函数都是exec系列的函数,并且都非常的相似,但是只要知道了其中的规律就能够牢记

  • 这些替换函数都是exec为基础,int类型的返回值。
  • 后缀有 l (list):表示后面的参数用列表
  • 后缀有 p (path):表示前面的参数只需文件名,会自动搜索环境变量PATH
  • 后缀有 v (vector):表示后面的参数用数组
  • 后缀有 e (env):表示自己维护环境变量

如果后面的参数使用数组,也就是后缀为v,也需要在最后加上NULL

实际上,前五个函数execl、execlp、execle、execv、execvp是库函数,而execve是系统调用。前五个函数都是都系统调用execve的封装,只是封装的形式不同,这样可以应对不同的情况。

到此这篇关于C语言进程程序替换的实现详解的文章就介绍到这了,更多相关C语言进程内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C语言进程程序替换的实现详解

本文链接: https://lsjlt.com/news/166233.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C语言进程程序替换的实现详解
    目录进程程序替换替换原理替换函数替换函数名称助记进程程序替换 替换原理 使用fork创建子进程后执行的是和父进程相同的程序,但是那样并没有多大的意义,子进程往往会“程序替...
    99+
    2024-04-02
  • 【Linux】进程的程序替换
    文章目录 1. 程序替换1.创建子进程的目的是什么?2.了解程序是如何进行替换的3. 程序替换的基本原理当创建进程的时候,先有进程数据结构,还是先加载代码和数据?程序替换是整体替换,不是局部替换execl 返回值 4. 替换函...
    99+
    2023-08-22
    linux 运维 服务器
  • C语言详解分析进程控制中进程终止的实现
    目录进程退出的形式进程退出的几种方法进程退出的形式 进程退出的几种情况 正常退出(自愿,代码运行完其结果正确)错误退出(自愿,代码运行完其结果不正确)异常退出(非自愿,代码异常直接终...
    99+
    2024-04-02
  • C语言字符串替换空格实例详解
    目录一、题目描述二、思路分析三、整体代码总结一、题目描述 请实现一个函数,把字符串 s 中的每个空格替换成"%20"。 示例: 输入:s = "We a...
    99+
    2024-04-02
  • Linux如何实现进程替换
    这篇文章将为大家详细讲解有关Linux如何实现进程替换,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Linux 进程替换(exec函数)实现代码  # include<...
    99+
    2023-06-09
  • C语言控制进程之进程等待详解
    目录进程等待的必要进程等待的方法wait函数waitpid函数获取子进程退出信息进程等待的必要 当一个进程终止的时候,它的资源,比如说PCB,数据等不会被立马清理掉。它会保持在已经终...
    99+
    2024-04-02
  • C语言如何实现字符串替换
    在C语言中可以通过循环遍历字符串的每个字符,然后判断是否需要替换,如果需要替换则使用新的字符替换原字符。下面是一个示例代码,实现了字...
    99+
    2023-08-24
    C语言
  • C语言只能实现解数独程序
    这篇文章主要介绍“C语言只能实现解数独程序”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C语言只能实现解数独程序”文章能帮助大家解决问题。用C语言写的解数独的程序。在linux下测试成功运行。效果如...
    99+
    2023-06-08
  • C语言实现扫雷小程序
    前言 《扫雷》是一款大众类的益智小游戏,于1992年发行。游戏目标是在最短的时间内根据点击格子出现的数字找出所有非雷格子,同时避免踩雷,踩到一个雷即全盘皆输。 多文件形式 在实现游戏...
    99+
    2024-04-02
  • C语言实现通讯录程序
    本文实例为大家分享了C语言实现通讯录程序的具体代码,供大家参考,具体内容如下 设计要求: 可以存放1000个人的信息,每个人的信息包括姓名、年龄、性别、电话、住址 通讯录功能包括: ...
    99+
    2024-04-02
  • C语言详解冒泡排序实现
    目录前言一、冒泡排序是什么二、具体步骤1.代码解释2.读入数据总结前言 在排序中,有各种各样的排序方式,今天我们将要来介绍《冒泡排序》。今天会从冒泡排序的具体意义和他的操作来展开。 ...
    99+
    2024-04-02
  • C语言qsort函数用冒泡排序实现过程详解
    目录前言1.冒泡排序的实现1.1冒泡排序的概念1.2具体代码的实现2.qsort函数3.qsort函数的实现前言 这篇文章就是指针进阶的收尾环节了,相信看过C语言进阶—&...
    99+
    2023-02-14
    C语言qsort函数 C语言冒泡排序实现qsort函数
  • C语言进度条的实现原理详解
    目录\r和\n行缓冲区进度条\r和\n 在程序里面,\r和\n分别代表什么意思? \r:表示“回车”,即回到当前行的起始位置 \n:表示换行,即列不变,另其一...
    99+
    2024-04-02
  • android程序怎样进行语言切换
     首先创建多语言资源,参考 在MainActivity的onCreate()中添加如下代码  public void onCreate(Bund...
    99+
    2022-06-06
    Android
  • C语言实现字符串替换的示例代码
     替换,意思就是用另一个字符串str3来替换str1中所有的str2。替换过程和查找的过程可以合并在一起,在上面循环查找的过程中,每找到一个str2,就把它替换为str3,...
    99+
    2024-04-02
  • 基于C语言实现泛型编程详解
    目录心理历程轮子用法大体流程部分源码心理历程 写了一段时间C++后,真心感觉STL里的容器是个好东西。一个容器可以容纳任意类型,容器对外的接口可以操作任意类型的数据,甚至包括自定义类...
    99+
    2024-04-02
  • C语言实现简易扫雷程序
    前言 前面写了三子棋的小游戏,感觉不过瘾,今天再来一个扫雷的小游戏。欢迎评论探讨 思路分析 游戏简介 说到扫雷很容易想起很多个方形格子,表面什么也没有,点击其中一个小格子,如果时炸弹...
    99+
    2024-04-02
  • C语言实现随机抽奖程序
    本文实例为大家分享了C语言实现抽奖小程序的具体代码,供大家参考,具体内容如下 #include<stdio.h> #include<stdlib.h> #...
    99+
    2024-04-02
  • 用C语言实现扫雷小程序
    本文实例为大家分享了C语言实现扫雷小程序的具体代码,供大家参考,具体内容如下 扫雷程序的编写需要有清晰的思路,所以我们先要清楚扫雷的实现有几个功能模块让我们编写,再用主函数将功能结合...
    99+
    2024-04-02
  • C语言实现自动发牌程序
    目录题目描述问题分析代码实现运行结果网上参考题目描述 一副扑克有52张牌,打桥牌时应将牌分给4个人。请设计一个程序完成自动发牌的工作。要求:黑桃用S (Spaces)表示,红桃用H ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作