做外语网站,商昊网站建设,装修之家,百度能搜到自己的网站介绍
使用fork创建一个进程之后#xff0c;经常会在新进程中调用exec函数执行别的程序当前进程调用exec函数之后#xff0c;这个进程会被完全替代换成新的程序#xff0c;即便如此仍然是同一个进程#xff0c;进程ID不变函数族 execl execlp execle execvp execvpe头文件 …介绍
使用fork创建一个进程之后经常会在新进程中调用exec函数执行别的程序当前进程调用exec函数之后这个进程会被完全替代换成新的程序即便如此仍然是同一个进程进程ID不变函数族 execl execlp execle execvp execvpe头文件 unistd.h功能:在进程中执行一个可执行文件gcc -o xxx.c xxx返回值成功无返回值失败返回 -1并且从源程序的调用点继续执行
#include unistd.h
extern char **environ;int execl(const char *path, const char *arg, ...);
int execlp(const char *file, const char *arg, ...);
int execle(const char *path, const char *arg,..., char * const envp[]);
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 envp[]);
参数说明第一个参数path为可执行文件的路径和名字arg可执行程序所带的参数第二个参数之后当做该文件的argv[0]、argv[1]等最后一个参数必须用NULL作为结束file如果参数file中包含/则就将其视为路径名否则就按 PATH环境变量在它所指定的各目录中搜寻可执行文件exec族最后一位的使用含义l : 使用参数列表p使用文件名并从PATH环境进行寻找可执行文件v应先构造一个指向各参数的指针数组然后将该数组的地址作为这些函数的参数。e多了envp[]数组使用新的环境变量代替调用进程的环境变量
例子
#include cstdio
#include unistd.hint main(void ){printf(before execl\n);if (execl(/home/gsc/Projects/stress_test/test/Test_output,first,second,NULL) -1){printf(execel failed!\n);}printf(after execel\n);
}
//Test_output.c
#include stdio.hint main(int argc,char* argv[]){for (int i0;iargc;i){printf(argv[%d]:%s\n,i,argv[i]);}
} 实验说明先用gcc编译Test_output.c生成可执行文件Test_output并放在当前路径下。文件Test_output的作用是打印命令行参数。然后再编译main.c,用execl 找到并执行Test_output将当前进程main替换掉所以”after execl” 没有在终端被打印出来。