fork父子进程

内存分为四个区域 内核区 堆 栈 常量区
子进程是父进程的复制品,执行一次返回两次,在使用 堆,栈,或者常量区的时候都是写时复制,以下是程序示例

func.h
#include <sys/stat.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <dirent.h>
#include <stdlib.h>
#include <time.h>
#include <pwd.h>
#include <grp.h>
#include <fcntl.h>
#include <sys/select.h>
#include <sys/time.h>
#define args_check(argc,num) {if(argc!=num) {printf("error args\n");return -1;}}

fork.c
#include "func.h"
int g_iNum=10;
int main()
{
    pid_t pid;
    pid=fork();
    if(0==pid)
    {//这里是子进程的代码
        printf("I am child process,g_iNum=%d\n",g_iNum);
        g_iNum=5;
        printf("I am child process,g_iNum=%d,g_iNum_addr=%p\n",g_iNum,&g_iNum);
    }else{
     //这里是父进程的代码
        printf("I am parent process,g_iNum=%d\n",g_iNum);
        sleep(1);
        printf("I am parent process,g_iNum=%d,g_iNum_addr=%p\n",g_iNum,&g_iNum);
        return 0;
    }
}

#include "func.h"
//堆空间
int main()
{
    pid_t pid;
    char *p=(char*)malloc(20);
    strcpy(p,"hello");
    pid=fork();
    if(0==pid)
    {//这里是子进程的代码
        printf("I am child process,%s\n",p);
        strcpy(p,"world");
        printf("I am child process,%s,%p\n",p,p);
    }else{
     //这里是父进程的代码
        printf("I am parent process,%s\n",p);
        sleep(1);
        printf("I am parent process,%s,%p\n",p,p);
        return 0;
    }
}

//栈空间
#include "func.h"

int main()
{
    pid_t pid;
    int iNum=10;
    pid=fork();
    if(0==pid)
    {//这里是子进程的代码
        printf("I am child process,iNum=%d\n",iNum);
        iNum=5;
        printf("I am child process,iNum=%d,iNum_addr=%p\n",iNum,&iNum);
    }else{
     //这里是父进程的代码
        printf("I am parent process,iNum=%d\n",iNum);
        sleep(1);
        printf("I am parent process,iNum=%d,iNum_addr=%p\n",iNum,&iNum);
        return 0;
    }
}
#include "func.h"

int main()
{
    pid_t pid;
    int fd=open("file",O_RDWR);
    pid=fork();
    if(0==pid)
    {//这里是子进程的代码
        printf("I am child process\n");
        lseek(fd,5,SEEK_SET);
    }else{
     //这里是父进程的代码
        printf("I am parent process\n");
        sleep(1);
        char buf[128]={0};
        read(fd,buf,sizeof(buf));
        printf("I am parent process,%s\n",buf);
        return 0;
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_33805992/article/details/87088013