Ответ 1
write
- системный вызов - он реализуется интерфейсом между пользовательским режимом (где такие программы, как ваш), и ядром операционной системы (которое обрабатывает фактическую запись на диск, когда байты записываются в файл).
printf
является стандартной библиотечной функцией C - она реализуется посредством кода библиотеки, загруженного в вашу программу пользовательского режима.
Функции вывода стандартной библиотеки C буферизуют их вывод по умолчанию, пока не будет достигнут конец строки. Когда буфер заполнен или завершен символом новой строки, он записывается в файл по вызову write
из реализации библиотеки.
Следовательно, выход через printf
не будет немедленно отправлен в операционную систему write
. В вашем примере вы буферируете букву "u", затем сразу же напишите букву "m", затем добавьте "d\n" в буфер, а стандартная библиотека сделает вызов write(STDOUT_FILENO, "ud\n");