题目描述:封装fork/wait等操作, 编写函数 process_create(pid_t* pid, void* func, void* arg), func回调函数就是子进程执行的入口函数, arg是传递给func回调函数的参数.
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/wait.h>
#include<string.h>
void func(char *arg[])//子进程要执行的函数
{
execvp(arg[1],arg+1);//因为在输入的时候,argv里的第一个参数是可执行程序的名字,不是要执行的参数,所以要从argv里的第二个参数
//比如要输入:./process_create ls -l
//argv[0] --->./process
//argc[1] --->ls
//argc[2] --->-l
exit(1);
}
typedef void(*FUNC)(char**);
void process_creak(pid_t* pid,void* func,char* arg[])
{
*pid = fork();//创建一个进程
if(*pid == 0)
{
//子进程
FUNC funct = (FUNC)(func);
(*funct)(arg);
}else
if(pid > 0)
{
//父进程
wait(NULL);
}else
{
//创建进程失败
perror("fork");
exit(1);
}
}
int main(int argc,char* argv[])
{
// ./process_creak 要执行的参数列表
// 比如: ./process_creak ls -l
if(argc == 1)
{
fprintf(stderr,"usage:%s 参数\n",argv[0]);
exit(1);
}
pid_t pid;
process_creak(&pid,func,argv);
}