if call fork() executed successfully, unix make 2 identical copies of address spaces, 1 parent , other child. both processes start execution @ next statement following fork() call.[ref:http://www.csl.mtu.edu/cs4411.ck/www/notes/process/fork/create.html].
so,if execute following code:
#include <stdio.h> int main(void) { printf("hello\n"); fork(); printf("world\n"); return 0; }
i think print
hello world world
but when run program prints
hello world hello world
please explain lacking in concept?
this buffering. when print "hello" doesn't go output immediately. instead, goes buffer. it's still there during fork, so, when each task terminates , flushes buffer, there 2 copies send output.
to counter this, specify unbuffered i/o or call fflush
before fork flush buffer.
Comments
Post a Comment