This is the mail archive of the
cygwin@cygwin.com
mailing list for the Cygwin project.
fork()
- To: "CygWin" <cygwin at cygwin dot com>
- Subject: fork()
- From: "Ronald Landheer" <ronald at landheer dot com>
- Date: Mon, 16 Jul 2001 14:59:18 +0200
Hello all,
Being used to DJGPP - not CygWin - I may have lost my hand on the forking
idea a while back, so I thought I'd try the following piece of code:
-- BEGIN CODE SNIPLET --
#include <stdio.h>
#include <unistd.h>
int main(void) {
int rVal, i;
rVal = fork();
if (!rVal) {
for (i = 0; i < 100; i++) printf("0");
} else {
for (i = 0; i < 100; i++) printf("1");
} // if
printf("\n");
return(0);
} // main()
--- END CODE SNIPLET ---
This compiles without warnings or errors (phew!) but produces an output
somewhat different than I expected:
-- BEGIN OUTPUT SNIPLET --
0000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000001111111111111111111111111111111111111111111111111111
111111111111111111111111111111111111111111111111
--- END OUTPUT SNIPLET ---
I'd expected the 0's and 1's to be jumbled..
I tried the same with the following Perl script: (please don't mind the
syntax - I'm not a Perl programmer..)
-- BEGIN CODE SNIPLET --
#!/usr/bin/perl
unless (defined($pid = fork)) {
die("Cannot fork: $!");
}
$i = 0;
unless ($pid) {
while ($i < 100) {
printf("0");
$i = $i + 1;
}
exit;
}
while ($i < 100) {
printf("1");
$i = $i + 1;
}
--- END CODE SNIPLET ---
expecting the same output as the C thingy, but no:
-- BEGIN OUTPUT SNIPLET --
1111111111111111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111110000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000
--- END OUTPUT SNIPLET ---
So here's my questions:
1. does fork() really make a new process?
2. does the new process (if made at all) run simultaniously with the
old one?
3. if so, why this output?
4. why is there a difference between the Perl and C programs'
outputs? (please don't laugh too loud if it's because of my Perl
inabilities..)
Thanx!
Ronald
-----BEGIN GEEK CODE BLOCK-----
Version: 3.1
GCS/LS/L/S/IT d- s-:+ a-- C++
UL+++ P+++ L++ E- W+++ N+++ o--
!K w !O M++ V- PS- PE- Y+ PGP++
t++(+) 5 X- R+++ !tv b++ DI++++
D-- G e+++ h r-- y-
------END GEEK CODE BLOCK------
--
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Bug reporting: http://cygwin.com/bugs.html
Documentation: http://cygwin.com/docs.html
FAQ: http://cygwin.com/faq/