函数格式:
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);
不带 l 的exec函数:execv,execvp表示命令所需的参数以char *arg[]形式给出且arg最后一个元素必须;
//========================================================================
注意:这两个函数之间的关系,如同 execl() 与 execlp() 函数之间的关系;
就是指定程序的路径,是需要指定绝对路径,还是到系统的环境变量目录下查找;
//========================================================================
例如:
char* arg[] = {"ls", "-a", "/home", NULL}; //定义参数列表
execv("/bin/ls", arg); // OK,第一个参数是 path,是程序所在的绝对路径;
execv("ls", arg); // ERR, 第一个参数是程序名,不是绝对路径;
execvp("ls", arg); // OK, 第一个参数是程序名,函数会到系统的环境变量目录下,找到该程序来执行;
//========================================================================
测试例子如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <limits.h>
int main(void)
{
pid_t childpid;
char* const envp[] = {"name=wkf", "addr=sz", NULL};
childpid = fork();
if(-1 == childpid)
{
perror("fork err! \n");
return 1;
}
else if(0 == childpid)
{
printf("in child process!\n");
char * const envp[] = {"AA=11", "BB=22", NULL};
//execl("/bin/ls", "ls", "-l", NULL);
//execl("/bin/ls", "ls", NULL);
//execl("/bin/", "ls", NULL);
//execlp("ls", "ls", "-a", "/home/", NULL);
//execle("./hello", "hello", NULL, envp);
char* arg[] = {"ls", "-a", "/home", NULL};
//execv("/bin/ls", arg);
//execv("ls", arg);
execvp("ls", arg);
printf("child process end ...!");
return 1;
}
printf("in father process! \n");
pid_t ret = wait(NULL);
if(ret != childpid)
{
perror("father wait err!");
}
printf("hehe ...\n");
return 1;
}
//========================================================================
只需要99元就可以投资自己,掌握Linux系统编程!主要传授《Linux C/C++程序设计》《Linux 系统编程》,主页有学习视频!
只需要99元就拥有全部课程和资料,让我们用技术改变自己,改变生活,改变世界!
视频可以百度搜索:韦凯峰Linux编程学堂