程序替换函数

进程替换

如果我们要让子进程执行一个“全新的的程序”呢?就得使用进程替换技术。进程不变,仅仅替换当前的代码和数据,叫做进程替换,进程替换并没有创建新的进程,即子进程id并没有改变。只是替换了代码和数据。

execl()

path:要执行的目标程序的路径
arg:填入命令及其参数/可执行程序名
…:可变参数列表,一般填NULL
在这里插入图片描述
代码示例:
在这里插入图片描述
这个程序替换的作用是:执行ls -a -l -n -i 命令。
注意:execl()不但可以使用系统的命令,还可以使用自己写的程序,即在路径填自己写的可执行程序的路径。

execv()

这个替换函数的使用与execl()差不多,只不过传入的命令用数组表示
在这里插入图片描述
代码示例:
在这里插入图片描述

execlp()

这个函数不需要带路径,但需要你要执行的可执行程序的文件名,再接命令+参数
在这里插入图片描述
代码示例:
在这里插入图片描述

execvp()

这个替换函数与execlp相似,只不过命令及其参数用数组表示。
在这里插入图片描述
代码示例:
在这里插入图片描述

execle()

前三个参数与cxcl相同,第四个参数是用来传给arg对应的可执行程序。
在这里插入图片描述
代码示例:
myexe.c源文件:这个程序的作用是打印系统环境变量
在这里插入图片描述
运行这个代码:打印系统的环境变量
在这里插入图片描述
myload.c源文件:这个代码使用了execle()。用myexe这个程序替换这份代码,将env数据传给这个程序。
在这里插入图片描述
运行myload.c:我们发现myexe不再打印系统变量,而是打印我们传给myexe的变量
在这里插入图片描述

execve()

这个替换函数与excle相似,只不过可执行程序名用数组表示。
在这里插入图片描述
代码示例:
在这里插入图片描述

编写记忆

分不清怎么使用这些替换函数,我们可以根据函数名来做记怎么使用这些函数。
函数名有 “l” ,表示要将命令及其参数写出来
有 “v”:用数组表示命令及其参数
有“p”:表示不用带具体路径
有"e":表示需要自己传入自己的环境变量
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值