刚看到这个题目的时候,换是有点陌生的,因为自己对这个知识点感到有点陌生,通过相关的查资料,我对这个问题有了一定的认识,下面就是我对这个问题的相关的解答。可能自己写的并不是特别的完美。
编写函数 process_create(pid_t* pid, void* func, void* arg), func回调函数就是子进程执行的入口函数, arg是传递给func回调函数的参数.
代码的实现如下:
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <unistd.h>
4
5 int process_create(int (*func)(),const char* file,char* argv[])
6 {
7 int ret=0;
8 pid_t pid=fork();
9 if(pid==0){//子进程
10 ret=func(file,argv);
11 if(ret==-1){
12 printf("调用execvp失败\n");
13 perror("func");
14 exit(-1);
15 }
16 }
17 else
18 {
19 int st;
20 pid_t ret=wait(&st);
21
22 if(ret==-1){
23 perror("wait");
24 exit(-1);
25 }
26 }
27 return 0;
28 }
29
30 int main(){
31
32 char* argv1[]={"ls"};
33 char* argv2[]={"ls","-al","/etc/passwd",0};
34 process_create(execvp,*argv1,argv2);
35 return 0;
36 }
37
代码运行的结果如下:
以上就是函数fork,wait的封装。
在这里实现的过程中涉及到了execvp函数。
execvp(执行文件)
相关函数:
fork、execl、execle、execlp、execv
表头文件:
定义函数:
int execvp(const char* file,char* const argv[ ]);
函数说明:
execvp会从PATH环境变量所指的目录中查找符合参数file的文件名,找到后便执行该文件然后将第二个参数argv传给该欲执行的文件。
返回值:
如果执行成功则函数不会返回,执行失败则返回-1,并将失败原因存放在errno中。