linux编程|fork函数讲解

[[email protected] bdkyr]# cat fork_test.c

/*

*  create by bdkyr

*  date 2015-1-22

*/

#include <stdlib.h>

#include <stdio.h>

#include <errno.h>

#include <unistd.h>

#include <stdarg.h>

#include <string.h>

#define MAXLINE 4096   /* max line length */

int glob = 6;

char buf[]= "a write to stdout\n";

void err_sys(const char *fmt, ...);

static void err_doit(int, int, const char *, va_list);

int main(void){

int var;

pid_t pid;

var = 88;

if (write (STDOUT_FILENO, buf, sizeof(buf) -1) != sizeof(buf)-1)

err_sys("write error");

printf("before fork\n");

if((pid = fork()) < 0){

err_sys("fork error");

}else if(pid == 0){

glob++;

var++;

}else{

sleep(2);

}

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

exit(0);

}

void err_sys(const char *fmt, ...){

va_list ap;

va_start(ap, fmt);

err_doit(1, errno, fmt, ap);

va_end(ap);

exit(1);

}

static void err_doit(int errnoflag, int error, const char *fmt, va_list ap){

vsnprintf(buf, MAXLINE, fmt, ap);

if(errnoflag)

snprintf(buf+strlen(buf), MAXLINE-strlen(buf), ": %s", strerror(error));

strcat(buf, "\n");

fflush(stdout);

fputs(buf, stderr);

fflush(NULL);

}

[[email protected] bdkyr]# gcc fork_test.c -o fork_test

[[email protected] bdkyr]# ./fork_test

a write to stdout

before fork

pid=5209, glob = 7, var = 89

pid=5208, glob = 6, var = 88

时间: 2024-10-01 03:26:17

linux编程|fork函数讲解的相关文章

linux中fork()函数详解[zz]

转载自:http://www.cnblogs.com/york-hust/archive/2012/11/23/2784534.html 一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事. 一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间.然后把原来的进程的所有值都复制到新的新进程中,只有

Linux编程 ---- dup函数

dup,dup2,dup3函数       顾名思义,dup及duplicate的简写,也就是复制的意思.而事实上这几个函数的功能也确实是复制文件描述符.那为什么要复制文件描述符呢?呵呵,我认为是程序员想偷懒,因为这个功能可以进行输入输出重定向. 下面这个程序将实现文件复制功能 1 #include<stdio.h> 2 #include<sys/types.h> 3 #include<fcntl.h> 4 #include<stdlib.h> 5 #inc

深入理解Linux的fork函数

一.问题引入 工作期间,某系统设计师抛出如下一个问题,下面的代码,输出几个"-"?: /****************************************************************************** Copyright by Thomas Hu, All rights reserved! Filename : fork01.c Author : Thomas Hu Date : 2012-8-5 Version : 1.0 Descript

Linux 中 fork() 函数详解

需要的头文件: #include <sys/types.h> #include <unistd.h> pid_t fork(void) 功能: 用于从一个已存在的进程中创建一个新进程,新进程称为子进程,原进程称为父进程. 参数: 无 返回值: 成功:子进程中返回 0,父进程中返回子进程 ID.pid_t,为无符号整型. 失败:返回 -1. 失败的两个主要原因是: 1)当前的进程数已经达到了系统规定的上限,这时 errno 的值被设置为 EAGAIN. 2)系统内存不足,这时 err

linux的fork函数

   fork函数  头文件:#include<unistd.h> 函数原型:pid_t fork( void);(pid_t 是一个宏定义,其实质是int 被定义在#include<sys/types.h>中) 返回值: 若成功调用一次则返回两个值,子进程返回0,父进程返回子进程ID:否则,出错返回-1  函数说明:一个现有进程可以调用fork函数创建一个新进程.由fork创建的新进程被称为子进程(child process).fork函数被调用一次但返回两次.两次返回的唯一区别

linux中fork函数的一个小思考

1.fork函数 头文件: #include<unistd.h> 函数原型: pid_t fork( void);(pid_t 是一个宏定义,其实质是int 被定义在#include<sys/types.h>中) 返回值: 若成功调用一次则返回两个值,子进程返回0,父进程返回子进程ID:否则,出错返回-1 函数说明: 一个现有进程可以调用fork函数创建一个新进程.由fork创建的新进程被称为子进程(child process).fork函数被调用一次但返回两次.两次返回的唯一区别

Linux中fork函数详解

一.fork基础知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事. 一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间.然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同.相当于克隆了一个自己. fork()函数得到的子进程,继承父进程的所有系统资源,包括,代码段.数据区.常量区等

Linux中fork()函数详解

参考地址 1.对fork函数的认识: 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程, 也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事. 一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间.然后把原来的进程的所有值都 复制到新的新进程中,只有少数值与原来的进程的值不同.相当于克隆了一个自己. 需要注意的一点:就是调用fork函数之后,一定是两个进程同时执行的

linux之fork()函数详解

一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程, 也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事. 一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间.然后把原来的进程的所有值都 复制到新的新进程中,只有少数值与原来的进程的值不同.相当于克隆了一个自己. 我们来看一个例子: [cpp] view plaincopy /* *  fork