How does printf work internally?

sdasdadas picture sdasdadas · Aug 16, 2013 · Viewed 12.5k times · Source

I am curious as to how printf works internally within Linux. I don't understand how it writes data to STDOUT.

After a bit of searching for the internals, I downloaded glibc and took a look at the source code:

__printf (const char *format, ...)
{
   va_list arg;
   int done;

   va_start (arg, format);
   done = vfprintf (stdout, format, arg);
   va_end (arg);

   return done;
}

After finding this, I went deeper into the vfprintf function - but the file is about 2500 lines of unfamiliar C code. I'm looking for an explanation from 10,000 feet of how printf works with a computer's memory and output to display characters on screen.

If I were a piece of assembly code what would I have to do to accomplish the same task? Is it operating system dependent?

Answer

R.. GitHub STOP HELPING ICE picture R.. GitHub STOP HELPING ICE · Aug 16, 2013

I think you're looking at the wrong layer. The logic in vfprintf is responsible for formatting its arguments and writing them through the underlying stdio functions, usually into a buffer in the FILE object it's targetting. The actual logic for getting this output to the file descriptor (or on other non-POSIX-like systems, the underlying device/file representation) is probably in fwrite, fputc, and/or some __-prefixed internal functions (perhaps __overflow).