当前位置:网站首页>程序替换函数

程序替换函数

2022-06-22 14:34:00 股神。

进程替换

如果我们要让子进程执行一个“全新的的程序”呢?就得使用进程替换技术。进程不变,仅仅替换当前的代码和数据,叫做进程替换,进程替换并没有创建新的进程,即子进程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":表示需要自己传入自己的环境变量
在这里插入图片描述

原网站

版权声明
本文为[股神。]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_52540905/article/details/125389171