exec函数族

1.exec函数族
linux系统中有一系列的函数可以将一个进程的执行流程从一个可执行程序转移到另一个可执行程序。即装载并运行一个程序。这些函数称为exec函数族:
使用exec函数并不是创建新的进程,只是用了一个全新的程序替换了当前进程的正文段,数据,堆和栈。

函数原型:

#include <unistd.h>
int execl(const char *path, const char *arg, ...);
参数:path被执行的程序名(完整的路径),arg1-argn:是被执行程序所需的命令行参数,含程序名,以空指针NULL结束。
如例子:
#include <unistd.h>
int main()
{
execl("/bin/ls","ls","/",NULL);
return 0;
}
实现列出根目录下的文件。

int execv(const char *path, char *const argv []);
参数:path被执行的程序的名(含完整路径),argv[]是被执行的所需要的命令行参数数组。
如例子:
#include <unistd.h>
int main()
{
char * argv[] = {"ls","/",(char*)0};
execv("/bin/ls",argv);
return 0;
}

int execle(const char *path, const char *arg, ..., char *const envp[]);

int execve(const char *path, char *const argv[], char *const envp[]);

int execlp(const char *file, const char *arg, ...);

int execvp(const char *file, char *const argv[]);
exec函数的区别:

(1)前四个区路径名作为参数,后两个则是文件名
(2)与参数传递有关。execl、execlp以及execle要求将新程序的每个命令行参数(command-line arguments)都指定为一个单独的参数,以NULL指针表明参数的结束。另外三个函数(execv、execvp和execve),首先须要建立一个指向各参数的指针数组,然后将该数组的地址作为这三个函数的参数。
(3)与向新程序传递环境变量有关。以e结尾的两个函数(execle和execve)可以传递一个指向环境字符串指针数组的指针。其他四个函数则调用进程中的environ变量为新进程复制现有的环境。

上面几个函数用法类似,只是有小的差别。
参数说明:
参数argc指出命令行参数个数,数组argv存放所有命令行参数,数组envp存放所有的环境变量。环境变量一般是以字符串“XXX=xxx”的形式存在的,XXX表示变量名,xxx表示变量的值。我们常见的是PATH环境变量。
argv和envp数组存放的都是指向字符串的指针,这两个数组都以一个NULL元素表示数组结尾。
举个例子,不如使用execve函数,第一个参数path是被执行的应用程序的完整路径,第二个参数argv参数就是传递给应用程序的命令行参数(可执行文件的名字),第三个是传递给应用程序的环境变量。

exec函数族的关系:
这6个函数中,通常只有execve是内核的系统调用,另外5个是库函数,最终需要调用该系统调用。



例子参看linux代码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ShaYQ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值