linux高编进程------exec函数族
exec函数族的功能是用一个新的进程镜像替换replace当前的进程镜像
在使用的过程中也一定要刷新当前缓冲区。
/*****环境变量*****/ 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[]);
eg:
/************** * 功能:打印时戳 * ***********/ #include <stdio.h> #include <stdlib.h> #include <unistd.h> int main() { puts("Begin!"); //0.刷新缓冲区 fflush(NULL); //1.替换 execl("/bin/date","date","+%s",NULL); //2.失败退出 perror("execl()"); exit(1); //3.成功不会执行 puts("End!"); exit(0); }
=============================================================
fork与exec函数族的使用
/************** * 功能:子进程打印时戳 * 父进程等待收尸 * ***********/ #include <stdio.h> #include <stdlib.h> #include <unistd.h> int main() { pid_t pid ; puts("Begin!"); //0.刷新缓冲区 fflush(NULL); //1.创建子进程 pid = fork(); //2.失败判断 if(pid < 0) { perror("fork()"); exit(1); } //3.子进程:date if(pid == 0) { execl("/bin/date","date","+%s",NULL); //失败退出 perror("execl()"); exit(1); } //4.收尸 wait(NULL); puts("End!"); exit(0); }