Help in debugging this simple code snippet.

rj81inmit's Avatar, Join Date: Aug 2008
Newbie Member
Why does it always throw stderr ? Kindly help...

#include <stdio.h>
#include <unistd.h>
int main()
{
while(1)
{
fprintf(stdout,"hello-out");
fprintf(stderr,"hello-err");
sleep(1);
}
return 0;
}


thanks, robin.
0
xpi0t0s's Avatar, Join Date: Aug 2004
Mentor
What do you mean by "throw stderr"? What is the output from your program, and what are you expecting it to do?

I changed it slightly (while(1) -> for (int i=0; i<5; i++)), built and ran it in Visual Studio 2005 (without the sleep() call either cos I couldn't find where this was displayed) and the output was:
hello-out
hello-err
hello-out
hello-err
hello-out
hello-err
hello-out
hello-err
hello-out
hello-err

- as you see, displaying both hello-out and hello-err.

If you change it from while(1) to a short loop, what is the output then?
0
rj81inmit's Avatar, Join Date: Aug 2008
Newbie Member
Thats fine if you test with a finite for loop. but why is it first printing set of hello-err ? should it not print hello-out and then hello-err?
#include <stdio.h>
#include <unistd.h>
int main()
{
for(int i=0;i<5;i++)
{
fprintf(stdout,"hello-out");
fprintf(stderr,"hello-err");
// sleep(1);
}
return 0;
}

output: hello-errhello-errhello-errhello-errhello-errhello-outhello-outhello-outhello-outhello-out
expected (??) : hello-out hello-err hello-out hello-err hello-out hello-err hello-out hello-err hello-out hello-err
Just wanted to understand how the streams are interpreted by the compilers.
0
faizulhaque's Avatar, Join Date: May 2008
Skilled contributor
This is Not Correct Section for That Go to C/C++ Section for making this.
0
shabbir's Avatar, Join Date: Jul 2004
Go4Expert Founder
Moved to C-C++ forum.
0
xpi0t0s's Avatar, Join Date: Aug 2004
Mentor
It probably depends on how streams work on your platform. What are you using? (If you're not sure show me the output of uname -a)
Try adding fflush(stream-name); after each printf and see what happens, i.e.:
fprintf(stdout,"hello-out\n"); fflush(stdout);
fprintf(stderr,"hello-err\n"); fflush(stderr);
Output is often buffered rather than printed immediately so this could be the cause of the behaviour.