Here’s a very basic question I have. In my professor’s lecture slide, there is a example I dont really get.
She wrote:
printf("u");
write(STDOUT_FILENO, "m", 1);
printf("d\n");
…and she said the out put of this code would be:
mud
I don’t get it. So if anyone understand why this happens, please explain to me.
Reference this question:
http://lagoon.cs.umd.edu/216/Lectures/lect17.pdf
(in the second last slide page.)
writeis a system call — it is implemented by the interface between user mode (where programs like yours run) and the operating system kernel (which handles the actual writing to disk when bytes are written to a file).printfis a C standard library function — it is implemented by library code loaded into your user mode program.The C standard library output functions buffer their output, by default until end-of-line is reached. When the buffer is full or terminated with a newline, it is written to the file via a call to
writefrom the library implementation.Therefore, the output via
printfis not sent to the operating systemwriteimmediately. In your example, you buffer the letter ‘u’, then immediately write the letter ‘m’, then append “d\n” to the buffer and the standard library makes the callwrite(STDOUT_FILENO, "ud\n");