Буферизация stdout, работа fflush

246
24 ноября 2017, 07:21

Что делает fflush? Многие пишут,что эта функция дает команду ОС сбросить содержимое буфера на диск. Но разве этим занимается ОС? Насколько я понял при работе с файлами буфер создает сама программа, например, функция fopen. В таблице syscall-ов linux я не нашел чего-то похожего на flush. При этом в пример приводят вот такой код:

#include <stdio.h>
int main() {
  printf("Hello");
  while(true);
  return 0;
}

При запуске такой программы, hello напечатано не будет, если не добавить после printf вызов fflush(stdout). Однако вот такой код вполне нормально работает:

#include <stdio.h>
#include <unistd.h>
int main() {
  char b[] = "Hello";
  write(1,(void*)b,sizeof(b)-1);
  while(true);
  return 0;
}

Тут мы не используем высокоуровневые методы работы с stdout, а работаем на уровне syscall-ов. Я правильно понимаю что буферизация работы с файлами реализована средствами самой программы, а не ОС? И при вызове write, данные сразу будут записаны на диск?

READ ALSO
Помогите поставить заглушку в тесте

Помогите поставить заглушку в тесте

Есть метод, который нужно протестировать:

182
Java, double and float [дубликат]

Java, double and float [дубликат]

На данный вопрос уже ответили:

214
Не получается выполнить AsyncTask

Не получается выполнить AsyncTask

Есть одна Activity, в которой при клике на определенную кнопку выполняется AsyncTask, который в свою очередь делает запрос на API, чтобы получить токен...

238
Spring data save

Spring data save

Сущности

241