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.
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?
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.
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.