exec函数_UNIX环境高级编程(APUE)系列学习-8.3 exec系列函数

bbf609893a19bdf36828112bc3f7d35f.png

作用

用fork函数创建新的子进程后,子进程往往要调用一种exec函数以执行另一个程序。当进程调用一种exec函数时,该进程执行的程序完全替换为新程序,而新程序则从其main函数开始执行。

特点:

  1. 调用exec函数并不创建新进程,所以前后的进程ID并未改变
  2. exec用磁盘上的一个新程序替换了当前进程的正文段、数据段、堆段和栈段

函数形式

#include 

返回值: 若出错则返回-1,若成功则不返回。

参数说明

pathname

前4个函数参数为路径名

filename

两个以filename为参数的函数(execlp和execvp),如果包含“/”,则就将其视为路径名.则就按PATH环境变量,在它所指定的各目录中搜寻可执行文件,

PATH介绍

PATH变量包含了一张目录表(称为路径前缀),目录之间用冒号(:)分隔。例如: PATH=/bin:/usr/bin:/usr/local/bin:. 因为大部分的可执行文件都放在bin中,因此默认为bin文件夹下,并且最后的.表示当前文件夹。

注意:

若execlp或exevcvp使用路径前缀中的一个找到了一个可执行文件,但是该文件不是由连接编辑器产生的机器可执行文件,则就认为该文件时一个shell脚本,于是尝试调用/bin/sh,并以该filename作为shell的输入。

args介绍

execl、execlp和execle是l(列表)系列:输入参数args就是新可执行二进制文件的输入参数。例如我们选中的可执行二进制文件为date,命令为date +%s,那么arg0就是"date",arg1就是"+%s",并且以NULL结尾。 另外四个函数则应该先构造一个指向各参数的指针数组,然后将该数组地址作为这四个函数的参数。

环境表介绍

e表示环境,以e结尾的3个函数(execle、execve和fexecve)都可以传递一个指向环境字符串指针数组的指针。其他四个函数则使用调用进程中的environ变量为新程序复制现有的环境。

注意: 这7个函数只有execve是内核的系统调用。另外6个只是库函数,它们最终都要调用该系统调用。它们的关系如下:

6327acb583529b5dad95e06d0f509155.png

基本实现举例

#include 

解释:

4df52cff6bddcd57fd6e621daeadd916.png

fig8.16.c

#include 

解释:

eca0a06474ede33aa9f7dfb74d5f98d1.png

注意: 这里的echoall是任意命令行的意思

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值