станд. C++:: сброс ofstream (), но не близко ()

Я нахожусь на MacOSX.

В части регистратора моего приложения я вывожу данные в файл.

предположите, что я имею глобально заявленный std::ofstream outFile("log");

и в моем входе кодируют, я имею:

outFile << "......." ;
outFile.flush();

Теперь, предположите мои катастрофические отказы кода после того, как сброс () произойдет; материал, записанный в outFile перед flush() гарантируемый быть записанным в диск (отмечают, что я не называю a close()).

Спасибо!

13
задан Danilo Piazzalunga 26 February 2010 в 11:53
поделиться

4 ответа

Из среды выполнения C ++ с точки зрения, он должен был быть записан на диск. С точки зрения ОС он может оставаться в буфере, но это будет проблемой только в том случае, если вся ваша машина выйдет из строя.

13
ответ дан 1 December 2019 в 22:07
поделиться

] flush () очищает буферы библиотеки iostream - однако данные почти наверняка не удаляются сразу из буферов операционной системы в одно и то же время, поэтому существует небольшой период, в течение которого сбой операционной системы может привести к потере данных. конечно, вы потеряете данные в любой момент, если у вас возникнет сбой жесткого диска, независимо от того, были ли данные записаны или нет, поэтому я бы не стал особо беспокоиться об этом.

2
ответ дан 1 December 2019 в 22:07
поделиться

Если flush() вернулась, ваша программа успешно передала вывод в руки ОС. Если не произойдет сбоя ОС (или диска), ваши данные должны оказаться на диске при следующей записи (обратите внимание, что диск, скорее всего, имеет собственный твердотельный кэш).

Пока flush() не вернется, никто не знает, сколько данных попадет на диск.

2
ответ дан 1 December 2019 в 22:07
поделиться

В качестве альтернативного подхода вы можете полностью отключить буферизацию с помощью

outFile.rdbuf()->pubsetbuf(0, 0);

Запись в небуферизованный fstream может снизить производительность, но вы можете беспокоиться о что перед замером была бы преждевременная оптимизация.

6
ответ дан 1 December 2019 в 22:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: