By defalt stdout is "line - buffered".
It mean that after printf("...
\n") buffer was flushed if output to stdout.
Certainly the file I/O buffers isn't "line-buffered", and before fork(), buffers was not flushed. So its filled buffers was copied.
What happen if we write " for(int i = 0 ; i < 3; ++i) " ?
You can manage I/O buffering by using "setvbuf" function.