exec函数_exec的6种不同使用格式

经过前几章的了解我们对进程的创建和结束有了了解。

那么我们知道fork函数创建的进程只是将父进程的环境复制到新进程中,而没有用新程序来初始化创建的子进程,因此,它并不能执行一个新的目标程序,而这一点又是程序设计时所必须的,为此linux系统提供了exec系统调用。

exec函数有6种不同的使用格式,但是内核中只对应一个入口,不同之处在于不同格式有不同的名字和调用函数,这6种调用在头文件unistd.h中,格式如下:

int execl (const char *__path, const char *__arg, ...)

int execv (const char *__path, char *const __argv[])

int execle (const char *__path, const char *__arg, ...)

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[])

上面的参数path指出一个可执行目标文件的路径名,参数file指出可执行目标文件的文件名,arg作为约定,同path一样指出目标文件的路径名,参数argv是一个字符指针数组,由它指出该目标程序使用的命令行参数表,按约定第一个字符指针指向与path或file相同的字符串,最后一个envp与argv一样也是一个字符指针数组,由它指出该目标程序执行是的进程环境,它也以一个空指针结束。

调用成功时exec不返回,从而不执行exec以后的所有语句,失败时返回-1;

exec的6种格式在以下3点上有所不同:

1、 path是一个目标文件的完整路径名,而file是目标文件名,它可以通过环境变量path来搜索;

2、 有path或file指定的目标文件的命令行参数是完整的参数列表还是通过指针数组argv来给出的;

3、 环境变量是系统自动传递还是通过envp传递的;

下表说明了exec函数的6种不同格式对以上3点的支持

933620dcaacc3efbec47fad54b9221fe.png

图1

接下来我们来看一个简单的例子,来简单的使用下exec函数:

063d8bc625f4f963d61c686c77c2275c.png

图2

a87b318aa058ea828b4a45bacd4d349a.png

图3

然后我们再将上图中的12行的execl换成execlp,会打印出什么呢?

85e26488800d5cd3ed02f6197fc08a49.png

图4

可以看到exec调用成功了,由此可见execl和execlp这两个函数可以替换使用,但需注意的是execlp中指定的目标文件名必须在path所定义的某个路径名之下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值