封装fork/wait等操作, 编写函数 process_create(pid_t* pid, void* func, void* arg), func回调函数就是子进程执行的入口函数, arg是传递给func回调函数的参数.调研popen/system
1 #include<stdio.h>
2 #include<unistd.h>
3 #include<sys/wait.h>
4 void process_create(pid_t* pid,void* func,void* argv)
5 {
6 *pid=fork();
7 if(*pid<0){
8 perror("fork()");
9 }
10 else if(0==*pid){
11 ((int(*)())func) (((char**)argv)[0],(char**)argv);
12 perror("func");
13 }
14 else{
15 int st;
16 while(wait(&st)!=*pid);
17 }
18
19 }
20 int main()
21 {
22 pid_t pid;
23 char* argv[]={"ls","-l",NULL};
24 process_create(&pid,execvp,argv);
25 return 0;
26 }
运行结果:
以上就是fork,wait的封装。涉及到了execvp函数
execvp函数:从PATH环境变量所指的目录中查找符合参数file的文件名,找到后便执行该文件然后将第二个
参数argv传给该欲执行的文件