基本上我有以下工作流程(通過控制檯應用程序):在std :: ofstream被銷燬後文件是否準備好立即讀取?
- 讀取二進制文件(
std::ifstream::read
) - 做一些與數據讀取
- 寫回同一個文件(
std::ofstream::write
),覆蓋什麼 在那裏之前。
現在,如果我通過shell腳本運行這個整個控制檯程序1000次(總是使用相同的文件),是否安全地假設讀操作不會與以前運行的程序試圖寫入文件衝突?或者我需要等待處決(多久???)?我能否可靠地確定文件是否準備好?
我知道這不是最好的設計,只是想知道它是否可以可靠工作(試圖快速收集一些統計信息 - 輸入是不同的,但輸出文件總是相同的 - 需要閱讀,信息需要處理,那麼它需要更新(在這一點上只是覆蓋它))。
編輯:
它看起來像輸出是錯誤的基礎上的答案是不相關的操作系統問題,讀/寫我的樣子:
//read
std::ifstream input(fname,std::ios_base::binary);
while(input)
{
unsigned value;
input.read(reinterpret_cast<char*>(&value),sizeof(unsigned));
....
}
input.close();
...
//write
std::ofstream output(fname,std::ios_base::binary);
for(std::map<unsigned,unsigned>::const_iterator iter =originalMap.begin();iter != originalMap.end();++iter)
{
unsigned temp = iter->first;
output.write(reinterpret_cast<char*>(&temp),sizeof(unsigned));
temp = iter->second;
output.write(reinterpret_cast<char*>(&temp),sizeof(unsigned));
}
程序實例是同時運行還是按順序運行? –
@Matteo Italia - 它們按順序運行,實際上,shell腳本在循環中運行相同的控制檯應用程序... –