ファイル追加モード
OS(およびネットワークファイルシステム)が追加モードをサポートしている場合、追加モードを設定すると、複数のライターが存在する場合、書き込まれたデータは既存のデータを上書きしませんことが保証されます。これは、別のプロセスからのシークと書き込みの競合のために、追加モードなしでは実行できないものです。ログファイルの重要な保証です。
追加モードでは、ファイルの最後にのみ定義することができます。
Iostreamオープンモード
According to [ofstream.cons], ofstream (s, mode)
calls rdbuf()->open(s, mode|ios_base::out)
.
[filebuf.members]の "File open modes"の表によると、 filebuf :: open
の動作はオープンモードの fopen
の項で定義されています。
out
means "w"
app
and app|out
mean "a"
in|out
means "r+"
in|out|trunc
means "w+"
fopen man
によると、これらのモードは次のようになります。
- r+ Open for reading and writing.
- w Truncate file to zero length or create text file for writing.
- w+ Open for reading and writing. The file is created if it does not exist, otherwise it is truncated.
- a Open for appending (writing at end of file). The file is created if it does not exist.
最後に、 ate
は fseek(file、0、SEEK_END)
を意味します。
したがって、既存のデータを破壊することなく任意の位置に書き込むために開く場合は、 fopen(s、 "r +")
または ofstream(s、ios :: in iOS :: out)
IOW、C/C ++では、上書きせずにファイルを開いて書き込み用に開く必要があります。
POSIXの世界
O_READ
、 O_WRITE
、 O_CREATというPOSIXオープンフラグに直接アクセスするには、代わりにPOSIXの open
O_TRUNC
... filebuf :: open
とは異なり、これらはあまり強力ではありませんが、コード>フラグ。
もちろん、この関数は標準C ++の一部ではありません。私はすべての関連システムが open
をサポートしていると思います。