Linux系统编程:exec函数

本文详细解析了exec函数家族,包括execl、execle、execlp、execv、execve和execvp的功能与区别,通过实例展示了如何使用execl函数替换当前进程的执行程序。

Exec函数:

当使用fork函数创建子进程后,子进程往往会调用一种exec函数以执行另一个程序,当进程调用一种exec函数时,该进程执行的程序完全被替换为新的程序,而新的程序则从其main函数开始执行,因为调用exec并不创建新进程,而是用一个全新的程序替换了当前进程的正文,数据和堆栈。

 

我们经常说exec函数,其实并没有exec这个函数,exec是一系列函数的总称:

这些exec函数的功能都是把进程的代码替换成另外一份全新的代码,只是在参数上有些不同,execl,execle,execlp这三个函数参数是不定的,新程序有多少个命令行参数,就要传递多少个参数,每个命令行参数都要独立成为一个参数,execv,execve,execvp可以将新程序的所有命令行参数都放在第二个参数中进行传递。Execle,execve可以传递环境变量,其他函数要调用进程中的environ变量为新程序复制当前环境。Execlp,execvp第一个参数为文件名,其他四个函数第一个参数为路径名。

这里我们用一个例子来演示一下execl函数是如何替换程序的

在exec.c文件中我们创建一个子进程,并且在子进程中调用execl函数,切换到当前目录下的可执行文件main,注意execl函数的最后一个参数要传一个NULL(也就是(char*)0),这样系统才会知道该函数参数传递完成。

在main文件中我们输出一行提示符即可

运行结果如下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值