Java Mailing List Archive

http://www.redhatconfig.com/

Home » Red Hat Linux Discussion »

Re: bug in glibc?

David Tonhofer

2008-01-18

Replies: Find Java Web Hosting

Author LoginPost Reply
krishnaakishore@(protected):
> Hi all,
>
> I have a query regarding the output of the following code:
>
> #include<stdio.h>
> #include<stdlib.h>
> #include<unistd.h>
> main(){
>  int a=0;
>  while(1){
>    printf("XXX(%d)",++a);
>    sleep(1);
>    if(fork()==0){printf("\n");exit(0);}
>    //you can remove the printf here,
>    //its just to enhance the readability of output
>
>  }
> }
>
> The output should actually be:
> XXX(1)
> XXX(2)
> XXX(3)
> XXX(4)
> XXX(5)
> XXX(6) (and so on)
>
> But the output actually is:
> XXX(1)
> XXX(1)XXX(2)
> XXX(1)XXX(2)XXX(3)
> XXX(1)XXX(2)XXX(3)XXX(4)
> XXX(1)XXX(2)XXX(3)XXX(4)XXX(5)
> XXX(1)XXX(2)XXX(3)XXX(4)XXX(5)XXX(6) (and so on)
>
> The fork() call is triggering the flushing the buffers but not
> clearing them. Hence the data in the buffers is getting accumulated.
> Appending a '\n' to "XXX(%d)" will generate the expected output.
>  

Isn't this working as designed? You fork the whole process, so the
buffers are copied "as is", so the first process
prints XXX(1), the second starts off with a non-cleared XXX(1) and
prints XXX(2) on top, yielding XXX(1)XXX(2) etc...

Just my 2 cents...



--
redhat-list mailing list
unsubscribe mailto:redhat-list-request@(protected)
https://www.redhat.com/mailman/listinfo/redhat-list
©2008 redhatconfig.com - Jax Systems, LLC, U.S.A.