当前位置: 首页 > news >正文

Linux应用开发基础知识——进程学习2(exec函数、system函数、popen函数)(三)

目录

一、exec函数

1.exec族函数函数的作用:

2.exec族函数定义:

3.execl函数代码示例:​编辑​编辑

二、system函数

1. 函数原型:

2. 小试验:

三、popen函数

1. 函数原型:

2. 小试验:


一、exec函数

1.exec族函数函数的作用:

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

2.exec族函数定义:

功能:
  在调用进程内部执行一个可执行文件。可执行文件既可以是二进制文件,也可以是任何Linux下可执行的脚本文件。
函数族:
  exec函数族分别是:execl, execlp, execle, execv, execvp, execvpe
函数原型:
在这里插入图片描述
返回值:
  exec函数族的函数执行成功后不会返回,调用失败时,会设置errno并返回-1,然后从原程序的调用点接着往下执行。
参数说明:
path:可执行文件的路径名字
arg:可执行程序所带的参数,第一个参数为可执行文件名字,没有带路径且arg必须以NULL结束
file:如果参数file中包含/,则就将其视为路径名,否则就按 PATH环境变量,在它所指定的各目录中搜寻可执行文件。

exec族函数参数极难记忆和分辨,函数名中的字符会给我们一些帮助:
l : 使用参数列表
p:使用文件名,并从PATH环境进行寻找可执行文件
v:应先构造一个指向各参数的指针数组,然后将该数组的地址作为这些函数的参数。
e:多了envp[]数组,使用新的环境变量代替调用进程的环境变量

3.execl函数代码示例:
在这里插入图片描述
在这里插入图片描述


运行结果:
在这里插入图片描述
运行结果显示,成功使用exec函数后,后面关于Yes的打印就不执行了!
这个是execl函数与system函数的重要区别!

与直接运行了man函数是一样的,只不过是参数不同
直接运行man.c:
在这里插入图片描述

二、system函数

1. 函数原型:

在这里插入图片描述
关于system函数内部的代码内容:
在这里插入图片描述
可见里面使用了exec族函数,文件路径为bin目录下的bin目录下的sh文件,文件名为sh,参数为-c,在虚拟机中,我们可以探究一下sh -c 有什么用?
在这里插入图片描述
发现使用sh -c ./man和./man都实现了同样的功能,执行文件./+可执行文件,在其前面加sh -c 也是如此,由此可得,system函数就是执行cmdstring,只要将“./+可执行文件名”传入即可!
在这里插入图片描述

2. 小试验:

man函数与前面man函数一样
在这里插入图片描述
运行结果:
从运行结果就可以看出system函数和exec函数的区别,成功使用system函数后,其后面的关于Yes的打印依然执行!
在这里插入图片描述

三、popen函数

1. 函数原型:

在这里插入图片描述
函数好处:可以获取运行的输出结果
参数说明:
  command: 是一个指向以 NULL 结束的 shell 命令字符串的指针。这行命令将被传到 bin/sh 并使用 -c 标志,shell 将执行这个命令。

mode: 只能是读或者写中的一种,得到的返回值(标准 I/O 流)也具有和 type 相应的只读或只写类型。如果 type 是 “r” 则文件指针连接到 command 的标准输出;如果 type 是 “w” 则文件指针连接到 command 的标准输入。

返回值:
  如果调用成功,则返回一个读或者打开文件的指针,如果失败,返回NULL,具体错误要根据errno判断

int pclose (FILE* stream)
  参数说明:
  stream:popen返回的文件指针
  返回值:
  如果调用失败,返回 -1

作用:
  popen() 函数用于创建一个管道:其内部实现为调用 fork 产生一个子进程,执行一个 shell 以运行命令来开启一个进程这个进程必须由 pclose() 函数关闭。

2. 小试验:

在这里插入图片描述
运行结果:
在这里插入图片描述
与直接使用sh -c ps运行的现象是一样的
直接使用:
在这里插入图片描述
这里使用popen函数并不会将代码中运行的程序的输出结果输出出来,而是将其收进一个“管道”内,上面实验输出了结果是因为使用了printf函数将其打印出来!
删除printf函数后现象(注释了printf):
在这里插入图片描述
运行结果:
可以看到啥都没有!
在这里插入图片描述

http://www.xdnf.cn/news/1181017.html

相关文章:

  • 斐波那契数列策略
  • 人形机器人_双足行走动力学:Maxwell模型及在拟合肌腱特性中的应用
  • Java学习----原型模式
  • 使用Claude Code从零到一打造一个现代化的GitHub Star项目管理器
  • day46day47 通道注意力
  • 无源域自适应综合研究【2】
  • C++ 性能优化
  • 力扣 hot100 Day54
  • pytest中使用skip跳过某个函数
  • 无人机速度模块技术要点分析
  • 第三章:掌握 Redis 存储与获取数据的核心命令
  • MNIST 手写数字识别模型分析
  • 秋叶sd-webui频繁出现生成后无反应的问题
  • 【Web APIs】JavaScript 节点操作 ⑧ ( 删除节点 - removeChild 函数 | 删除节点 - 代码示例 | 删除网页评论案例 )
  • 算法竞赛阶段二-数据结构(34)数据结构链表STL vector
  • 【PyTorch】图像二分类项目-部署
  • Spring Boot 3整合Spring AI实战:9轮面试对话解析AI应用开发
  • HttpServletRequest深度解析:Java Web开发的核心组件
  • PyTorch数据选取与索引详解:从入门到高效实践
  • Vue3 面试题及详细答案120道(91-105 )
  • 开立医疗2026年校园招聘
  • 论文复现-windows电脑在pycharm中运行.sh文件
  • 工具篇之开发IDEA插件的实战分享
  • C# 方法执行超时策略
  • 处理URL请求参数:精通`@PathVariable`、`@RequestParam`与`@MatrixVariable`
  • Lua元表(Metatable)
  • Python 使用环境下编译 FFmpeg 及 PyAV 源码(英特尔篇)
  • TDengine 转化类函数 TO_CHAR 用户手册
  • 【数字IC验证学习------- SOC 验证 和 IP验证和形式验证的区别】
  • 借助 VR 消防技术开展应急演练,检验完善应急预案​