[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
Linux Programming |fork function explanation