вызывает ли ofstream :: close () syn c на linux? - PullRequest
0 голосов
/ 17 июня 2020

Re this quetion: Вызывает ли close () fsyn c () на Linux?

Этот вопрос описывает, что close () (c lib) не выполняет call syn c on linux.

Это то же самое для fstream :: close ()?:

http://www.cplusplus.com/reference/fstream/fstream/close/ предполагает, что он пишет все оставшиеся байты в файл. Я наблюдал (редкие) случаи, когда я завершал sh запись блока размером 2–3 КБ в файл, вызываю fs.close (), а затем пытаюсь открыть его, и открытие не удается. Добавление короткой задержки и / или вызов syn c, кажется, вылечит это.

Думаю, я ответил на свой вопрос, но описание std :: fstream :: close () сбивает меня с толку

Ответы [ 2 ]

2 голосов
/ 17 июня 2020

Это может зависеть от реализации библиотеки, но для обычных - нет. То, что написано в ccpreference, означает, что буфер внутреннего потока записывает любые ожидающие байты перед закрытием. Но он не запрашивает у драйвера файловой системы ОС принудительную немедленную запись на дисковое устройство.

1 голос
/ 17 июня 2020

делает ofstream :: close () вызовом syn c ...

Он sh сбрасывает буферы, которые являются внутренними для потока, и закрывает его. Не указано, вызывается ли что-то сопоставимое с sync или fsync.

... на linux?

Это зависит от реализации. Таким образом, это может зависеть от того, какую реализацию стандартной библиотеки вы используете. Если вы используете программу с открытым исходным кодом, вы можете взглянуть на исходный код, чтобы увидеть, что он делает.

...