exec函数族用来在当前进程中载入可执行文件,替换当前的数据段和代码段,
而后执行载入的可执行文件,其后缀释义如下:
1. “l”,以列举的方式传参如:
execl("/bin/ls", "ls", "-a", "-l", "-i", NULL);
1. “v”,以指针数组的方式传参如:
char* buf[] = {"ls", "-a", "-l", "-i", NULL};
execv("/bin/ls", buf);
1. “p”,在当前运行的环境变量下查找可执行文件:
execvp("ls", buf);
1. “e”,以自定义环境变量的方式传参
栗子如下
/*************************************************************************
> File Name: exec.c
> Author: XXDK
> Email: v.manstein@qq.com
> Created Time: Wed 15 Mar 2017 12:20:57 AM PDT
************************************************************************/
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
// exec使用可执行文件的代码段和数据段填充当前进程
// 故而,执行正确不会返回原程序
int main()
{
char* buf[] = {"ls", "-a", "-l", "-i", NULL};
int ret;
#if 0
// 1.
ret = execl("/bin/ls", "ls", "-a", "-l", "-i", NULL);
if(-1 == ret) {
perror("error\n");
}
#endif
#if 0
// 2.
ret = execv("/bin/ls", buf);
if(-1 == ret) {
perror("error\n");
}
#endif
char* buff[] = {"a.out"};
printf("xxdk\n");
// 自己执行自己
execv("./a.out", buff);
// 3.
ret = execvp("ls", buf);
if(-1 == ret) {
perror("error\n");
}
exit(1);
}