How does printf work internally?

assembly, c, printf, standard-library

Solution

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`).

Problem

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?

Original source

Related problems