exec函数族:
程序替换:就是替换一个正在运行中的程序,替换一个pcb在内存中的代码和数据
程序替换使用的是exec函数族:
int execl(const char * path,const char * arg,…)
…为不定参数,以NULL结束
int execlp(const char * file,const char * arg,…),函数放在指定的路径下
*int execle(const char * path,const char * arg,…,char const env[])
带p与不带p的区别:加载的新程序名称是否需要带路径,带p则不需要,只要文件名即可,但是文件必须放在指定的路径下(PATH环境变量的路径下)
带e与不带e的区别:是否由我们自己来给新程序赋予环境变量
int execv(const char * path,char * const argv[])
int execvp(const char * file,char * const argv[])
int execvpe(const char * file,char * const argv[],char * const env[])
int execve(const char * path,char * const argv[],char * const env[])
l与v的区别:程序运行参数赋予方式不同
#include <stdio.h>
2 #include <unistd.h>
3 #include <stdlib.h>
4
5 int main(int argc,char * argv[])
6 {
7 char *env[3] = {NULL};
W> 8 env[0] = "MYVAL = 1000";
9 env[1] = NULL;
10 int i;
11 for(i = 0;i < argc;i++)
12 {
13 printf("argc[%d] = [%s]\n",i,argv[i]);
14 }
15 //execl("/bin/ls","ls","-l",NULL);
16 //execlp("ls","ls","-i",NULL);
17 execle("/bin/ls","ls","-li",NULL,NULL);
18 char * arg[3] = {NULL};
W> 19 arg[0] = "myenv";
W> 20 arg[1] = "-i";
21 arg[2] = NULL;
22 execv("./myenv",arg);
23 printf("hello ~~\n");
24 return 0;
25 }