3

C ++がファイル(たとえば、20,000行のcsvファイル)を読み取っていて、読み取りの途中で別のプロセスがファイルを削除した場合(たとえば、ifstreamである場合)、C++はどのように動作しますか。

セグメンテーション違反が発生しますか、それとも行を格納しているベクトルに10,000行しかなく、問題が発生したことを示すエラーはありませんか?

同様に、ofstreamを介して書き込みを行っていて、削除によって中断された場合はどうなりますか?その場合、割り込みが途中である場合、出力ファイルには最後の10,000行しか含まれていませんか?

4

2 に答える 2

3

OSによって異なります。

Unix-y OSを使用している場合、削除は含まれているディレクトリやiノードの更新にすぎないため、データの読み取り/書き込みを続行します。したがって、ファイルのデータに影響を与えることはありません。

ただし、ファイルデータが存在するディスクブロックが、読み取り中に新しいファイルによって再利用される可能性がある場合(OSによって異なります)、バッファ内のデータを使い終えると、基本的に間違ったファイルのデータを読み取ることになります。

Windowsを使用している場合、Seth Carnegieがコメントで正しく指摘しているように、ファイルを読み取り用に開くと、ファイルは自動的にロックされます(したがって、削除できなくなります)。

于 2012-07-17T20:59:13.263 に答える
-1

システムに大きく依存していると思います。Linuxは動作し続ける可能性があるため、Windowsは頭痛の種になります。

于 2012-07-17T20:58:37.880 に答える