码迷,mamicode.com
首页 > 其他好文 > 详细

【APUE】fork函数

时间:2014-07-28 21:21:24      阅读:245      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   数据   io   for   代码   div   

#include <unisth.h>

pid_t fork(void)

fork函数被调用一次,返回两次。子进程的返回值是0,父进程的返回值是子进程的进程id。

子进程和父进程继续执行fork调用之后的指令,子进程是父进程的副本,子进程获得父进程数据空间、堆和栈的副本。注意:这是子进程所拥有的副本,父子进程并不共享这些存储空间部分。父子进程共享正文段

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

int glob=6;//全局变量,在堆中
char buf[]="a write to stdout\n";

int main()
{
    int var;//局部变量,栈中
    pid_t pid;

    var =88;
    if(write(STDOUT_FILENO,buf,sizeof(buf)-1)!=sizeof(buf)-1)
    {
        perror("write error");
    }
    printf("before fork:\n");

    if((pid=fork())<0)
    {
        perror("fork error");
    }
    else if(pid==0)
    {
        glob++;
        var++;
    }
    else{
        sleep(2);
    }

    printf("pid=%d,glob=%d,var=%d\n",getpid(),glob,var);
    exit(0);
}

输出:

a write to stdout
before fork:
pid=4989,glob=7,var=89
pid=4988,glob=6,var=88

fork的两种用法:

1.一个父进程希望复制自己,使父子进程同时执行不同的代码段

2.一个进程要执行一个不同的程序,在这种情况下,子进程从fork返回后立即调用exec

 

【APUE】fork函数,布布扣,bubuko.com

【APUE】fork函数

标签:style   blog   color   数据   io   for   代码   div   

原文地址:http://www.cnblogs.com/ljygoodgoodstudydaydayup/p/3873216.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!