封装fork/wait等操作, 编写函数 process_create(pid_t* pid, void* func, void* arg)

题目描述:封装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);
}

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值