为什么要用exec族函数,有什么作用?
(1)一个父进程希望复制自己,使父、子进程同时执行不同的代码段。这在网络服务进程中是常见的一一父进程等待客户端的服务请求。当这种请求到达时,父进程调用fork,使子进程处理此请求。父进程则继续等待下一个服务请求到达。
(2)一个进程要执行一个不同的程序。这对shell是常见的情况。在这种情况下,子进程从fork返回后立即调用exec
返回值:
exec函数族的函数执行成功后不会返回,调用失败时,会设置errno并返回-1,然后从原程序的调用点接着往下执行
参数说明:
path:可执行文件的路径名字
arg:可执行程序所带的参数,第一个参数为可执行文件名字,没有带路径且arg必须以NULL结束file: 如果参数fle中包含/,则就将其视为路径名,否则就按 PATH境变量,在它所指定的各目录中搜寻可执行文件
在Linux编程中常用的是execl,execlp和execv函数
execl与execlp函数的区别是:
(1)execl找不到绝对路径
(2)execlp找得到
execlp与execv函数区别是:
(1)execlp参数放在函数里面
if(execlp("ps","ps",NULL,NULL) == -1) { printf("execl failed!\n"); perror("why"); } (2)execvp参数被放在结构体 char *argv[] = {"ps",NULL,NULL}; if(execvp("ps",argv) == -1) { printf("execl failed!\n"); perror("why"); }
1.execl函数编程及示例
vi echoarg.c
子进程从fork返回后立即调用execl函数,从原程序的调用点接着往下执行
2.execlp函数编程及示例
execlp函数可以直接访问到ps的路径
execl则需要
3.execvp函数只与execlp函数参数存放位置不同