#cpp
Не могу понять как он работает. Есть пример: #include#include void file_abc() { std::ofstream f("test.txt"); f << "abc\n"; } void file_123() { std::ofstream f("test.txt"); f << "123\n"; } int main() { file_abc(); // file now contains "abc" std::ifstream f("test.txt"); std::cout << "Reading from the file\n"; char c; f >> c; std::cout << c; file_123(); // file now contains "123" f >> c; std::cout << c; f >> c; std::cout << c << '\n'; f.close(); file_abc(); // file now contains "abc" f.open("test.txt"); std::cout << "Reading from the file, with sync()\n"; f >> c; std::cout << c; file_123(); // file now contains "123" std::cout << f.sync() << std::endl; f >> c; std::cout << c; f >> c; std::cout << c << '\n'; } и вывод должен быть вроде как : Reading from the file abc Reading from the file, with sync() a23 Но у меня получается Reading from the file abc Reading from the file abc При этом f.sync() выдает 0. Как все таки это работает?
Ответы
Ответ 1
В вашем примере параллельного чтения и записи в один файл функция sync не спасёт, так как операционка не будет блокировать и синхронизировать бесконечный поток открытия файлов. После открытия файла на чтение все клиенты будут читать одно и то-же из буфера. При изменении файла следующие клиенты будут читать файл из буфера второго и тоже удивляться, что бабка Рая говорила другое. Результат чтения исходников и переводов. Функция sync обновляет буфер чтения до упора памяти. Если буфер заполнен полностью и ничего не добавилось всё остаётся точно так-же. Если файл изменился, то заново буфер обновлятся не будет. Если у вас было желание обновить содержимое буфера, то этот буфер нужно обнулить. Это можно достичь с помощью f.seekg(f.tellg());. Более красивого способа не нашёл.
Комментариев нет:
Отправить комментарий