Hey Rahul, I can't really prove my statement by quoting the gcc source code, because I don't know where this kind of "transformation" happens, but it seems that if you call printf and fprintf without variadic arguments (though just a string), gcc transforms this call into a cheaper call than (f)printf: printf -> puts fprintf -> fwrite (for the prototype, just check the man page of fwrite(3) Alternatively, you could use the gcc compiler option -fno-builtin or -fno-builtin-fprintf and -fno-builtin-printf. In this case, gcc doesn't transfrom the calls. Then you would just have to overwrite printf and fprintf. As a further alternative, you might think about using a named pipe for example to redirect the output to the GUI. Then you wouldn't have to overwrite default libc functions ... Hope that helps, Andi RahulJain83 wrote: > Hi Kai, > > Thanks for the reply, actually you are right for printfs, and my issue for > printfs has been resolved after defining puts too. > > But issue with fprintf still remains... can you please help.. I am pasting > here a sample application and commands to build them - > > [code] > /* > * ====================================================================== > * Filename: printf.c > * ====================================================================== */ > #include <stdio.h> > #include <stdarg.h> > extern "C" int fprintf (FILE *__restrict __stream, > __const char *__restrict __format, ...) > { > > int ret_status = 0; > //printf ("Called my version of fprintf\n"); > > va_list args; > va_start(args,__format); > ret_status = vfprintf(__stream, __format, args); > va_end(args); > return ret_status; > } > > extern "C" int fputs (__const char *__restrict __s, FILE *__restrict > __stream) > { > > int ret_status = 0; > //printf ("Called my version of fputs\n"); > > return fprintf(__stream, "%s", __s); > } > > extern "C" int printf (__const char *__restrict __format, ...) > { > > int ret_status = 0; > //printf ("Called my version of printf\n"); > > va_list args; > va_start(args,__format); > ret_status = vprintf(__format, args); > va_end(args); > return ret_status; > } > > extern "C" int puts (__const char *__s) > { > > int ret_status = 0; > //printf ("Called my version of puts\n"); > > return printf("%s\n", __s); > } > > /* > * ====================================================================== > * Filename: main.c > * ====================================================================== */ > > #include <stdio.h> > int main (int argc, char **argv) > { > fprintf (stdout,"This is a variable argument message - %s\n", "Rahul > Jain"); > fprintf (stdout,"This is a static argument message - Rahul Jain\n"); > > printf ("This is a variable argument message - %s\n", "Rahul Jain"); > printf ("This is a static argument message - Rahul Jain\n"); > return 0; > } > [/code] > > Build commands (with gcc 342) > /usr/local/soft/gcc/3.4.2/bin/g++ -ggdb -o printf.o -c printf.c > /usr/local/soft/gcc/3.4.2/bin/g++ -ggdb -o main.o -c main.c > /usr/local/soft/gcc/3.4.2/bin/g++ -ggdb -o a.out printf.o main.o > > Build commands (with gcc 424) > /usr/local/soft/gcc/4.2.4/bin/g++ -ggdb -o printf.o -c printf.c > /usr/local/soft/gcc/4.2.4/bin/g++ -ggdb -o main.o -c main.c > /usr/local/soft/gcc/4.2.4/bin/g++ -o a.out printf.o main.o > > Please see issue comes with gcc 424 and not with gcc 342. do you have any > idea ? Really appreciate your help .. > > Thanks > Rahul > > > Kai Ruottu-3 wrote: > >> RahulJain83 wrote: >> >>> Above code works fine for following fprintf calls (that pass variable >>> argument list to fprintf) - >>> >>> fprintf (stdout,"This is a variable argument message - %s\n", "Rahul >>> Jain"); >>> >>> However, for following fprintf call (that is not taking any variable >>> arguments), it seems fprintf from libgcc is getting picked up as then >>> print >>> comes on the screen instead of our Graphical interface window - >>> >>> fprintf (stdout,"This is a variable argument message - Rahul Jain\n"); >>> >>> I am not sure why this is happening. Is fprintf implemented as macro, >>> such >>> that it is working for case1 and not for case2. Can anybody help. >>> >>> >> Please check that those 'printf()'s haven't been changed to 'puts()'s >> ! Sometimes I found out that >> GCC produces a call to 'puts()' instead of 'printf()' with the simple >> "Hello World" program... Why >> it does this kind of optimization, is unclear but when this happens, >> doing something similar with 'puts()' >> could be your workaround... >> >> >> > >