setvbuf
, вероятно, способ пойти:
setvbuf (fp, NULL, _IONBF, 0);
Это полностью отключит буферизацию.Просто будьте готовы к неизбежному падению производительности.
Вы также должны знать, что во многих системах это будет сбрасываться только на уровне библиотеки времени выполнения, это не обязательно приведет к сбросу на носитель данных, так какUNIX fsync(fileno(fp))
попытается это сделать.
Так что, если ваша программа выйдет из строя, все будет в порядке, но не поможет, если вся ОС окажется в кричащей куче.Но тогда у вас, вероятно, есть большие проблемы, чем небольшая потеря вывода: -)
Но, если ваша программа не вызывает сбой , вам, вероятно, не стоит беспокоиться об этом.ISO C99 говорит, частично, что одно из действий exit()
и, следовательно, возврат от main()
, это:
Затем все открытые потоки с неписанными буферизованными данными сбрасываются, все открываютсяпотоки закрыты, ...
Таким образом, ваши данные будут выводиться независимо от этого.