Как я могу сказать, что файл flu sh действительно работает до закрытия файла? - PullRequest
1 голос
/ 03 апреля 2020

Я хочу убедиться, что данные записываются на диск, когда я вызываю flu sh.

Простой пример кода:

int main() {
    std::ofstream outfile("test.txt");
    for (int n = 0; n < 100; ++n) {
        outfile << n;
        outfile.flush();
        // TODO: insert code to make sure data is flushed to disk
        // I tried using the stat file size but it does not always grow after flush.
    }
    outfile.close();
    return 0;
}

Я уверен, что std::ofstream правильно реализует функцию flu sh. На самом деле я пытаюсь проверить функцию flu sh другой библиотеки, и это только пример.

1 Ответ

2 голосов
/ 03 апреля 2020

outfile.flush() вызовет sh буфер потока для операционной системы. Если вы хотите убедиться, что системные буферы записаны на диск, вы должны выполнить системный вызов, указанный в ОС c, чтобы сделать это. В POSIX-совместимых системах вы можете вызвать sync(), определенный в <unistd.h>.

...