Здравствуйте.
Имеем две программы и разделяемый файл, механизм синхронизации из виду упущу. Первая exe пишет файл, после каждой записи делает flush(), вторая читает. Можно ли быть уверенным, что читаются актуальные данные, а не какой-нибудь буферезированный хлам? Ведь можно буферезировать как out так и in, но ifstream flush() не имеет.
Экспериментальным путём проблем не обнаружил. Даже ofstream ведёт себя так, как будто буфера не имеет (назначал буфер руками). 2.cpp моментально видит свежие данные:
//1.cpp
int main()
{
std::ofstream f("fff");
char buf[100];
f.rdbuf()->pubsetbuf(buf, 90);
while(true)
{
f.seekp(0);
int i;
cin >> i;
f << i;
//f.flush();
}
}
//2.cpp
int main()
{
std::fstream f("fff");
char buf[100];
f.rdbuf()->pubsetbuf(buf, 90);
f << 4 << 3;
while(true)
{
this_thread::sleep_for(1s);
f.seekg(0);
int i;
f >> i;
cout << i << endl;
}
}