Date: Wed, 30 Jul 2003 20:37:43 +0400 From: Andrew Belashov <bel@orel.ru> To: freebsd-sparc64@freebsd.org Subject: Simple C program to demonstrate bug in fork(2) Message-ID: <3F27F457.8030401@orel.ru>
next in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format. --------------070807040700090203040900 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit I have written the small program for demonstrate bug in fork(2). Normal output: bel@bel$ ./forkbug Main: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Child working... Parent changed memory Child: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Parent waiting a child... Child exiting... Parent exiting... Bad output: bel@trash$ ./forkbug Main: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Parent changed memory Parent waiting a child... Child working... Child: bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Child exiting... Parent exiting... --------------070807040700090203040900 Content-Type: text/plain; name="forkbug.c" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="forkbug.c" #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <unistd.h> #include <sys/wait.h> #define BUFFLEN (128 * 1024 * 1024) /* 128 Mb */ #define CHECKLEN 60 char * buff; void docheck(const char * prefix); int main() { int i; pid_t pid; if ((buff = (char *) malloc(BUFFLEN)) == NULL) { perror("Out of memory"); exit(1); } memset(buff, 'a', BUFFLEN); buff[BUFFLEN-1] = '\0'; docheck(" Main"); if ((pid = fork()) == -1) { perror("fork() failed"); exit(1); } if (pid) { memset(buff + BUFFLEN - 1 - CHECKLEN, 'b', CHECKLEN/2); printf("Parent changed memory\n"); printf("Parent waiting a child...\n"); wait(&i); printf("Parent exiting...\n"); } else { printf("Child working...\n"); docheck("Child"); printf("Child exiting...\n"); } return 0; } void docheck(const char * prefix) { printf ("%s: %s\n", prefix, buff + BUFFLEN - 1 - CHECKLEN); } --------------070807040700090203040900--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3F27F457.8030401>