基本的に、次のワークフローがあります(コンソールアプリケーションを介して):
- バイナリファイルの読み取り (
std::ifstream::read
) - データ読み取りで何かをする
- 同じファイル ( ) に書き戻し、
std::ofstream::write
前にあったものを上書きします。
さて、このコンソール プログラム全体をシェル スクリプトで (常に同じファイルを使用して) 1000 回実行した場合、読み取り操作が以前に実行されたファイルへの書き込みを試みるプログラムと競合しないと仮定しても安全ですか? または、実行間で待機する必要がありますか (どれくらい???)? ファイルの準備ができているかどうかを確実に判断できますか?
私はそれが最良の設計ではないことを知っています。それが確実に機能するかどうかを知りたいだけです(いくつかの統計をすばやく収集しようとしています-入力は異なりますが、出力ファイルは常に同じです-読み取る必要があり、情報を処理する必要があります。更新する必要があります (この時点では単純に上書きしています))。
編集:
出力が間違っているという問題は、回答に基づいてOSに関連していないようです。私が行う読み取り/書き込みは次のようになります。
//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));
}