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