printf(3)
проходит через буферизованное средство ввода-вывода <stdio.h>
, которое включает в себя fputs(3)
и fputc(3)
. Вы наблюдаете нормальное поведение буферизации линии. Вы можете победить эту буферизацию, как отмечено с помощью setbuf(3)
, однако, так как вы не хотите ее в первую очередь, и вы уже используете прямой вызов ядра (read(2)
) для чтения, почему бы не немного изменить свою логику напрямую вызвать ядро с write(2)
?
char buffer[100];
int n;
n = snprintf(buffer, sizeof buffer, "format string...", args...);
write(1, buffer, n)
И если вы хотите, вы можете определить свой собственный directPrintf, чтобы сделать это проще:
#include <stdio.h>
#include <stdarg.h>
#include <unistd.h>
int directPrintf(const char *format, ...)
{
va_list ap;
char buffer[200];
va_start(ap, format);
int n = vsnprintf(buffer, sizeof buffer, format, ap);
va_end(ap);
return write(1, buffer, n);
}