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