lseekに対するO_APPENDの動作は何ですか? O_APPENDで開かれたファイルを上書きできますか?

lseekに対するO_APPENDの動作は何ですか? O_APPENDで開かれたファイルを上書きできますか?

文書にman lseekよると、

O_APPEND開いたファイル記述にファイルステータスフラグが設定されている場合は、write(2)ファイルオフセットをファイルの最後に移動しますlseek()

ファイルオフセットが呼び出しの前後に終了するかどうかはわかりませんwrite(2)

ファイルが開いている間に一番上にO_APPEND移動してファイルを書き換えることはできますかlseek

ベストアンサー1

ファイルが開いている間に一番上にO_APPEND移動してファイルを書き換えることはできますかlseek

いいえ。

~によるとPOSIX ドキュメントwrite():

ファイルステータスフラグのO_APPENDフラグが設定されている場合は、各書き込みの前にファイルオフセットをファイルの終わりに設定する必要があり、ファイルオフセットの変更と書き込み操作の間に中間ファイル修正操作を行わないでください。

あなたできるただし、以下を使用してくださいpwrite()

この関数は、指定された場所に書き込んでファイルオフセットを変更しない(設定されているかどうかにかかわらず)ことを除いて、pwrite()同じでなければなりません。の最初の3つの引数は、ファイル内の目的の場所にオフセットを追加する4番目の引数と同じです。 ...write()O_APPENDpwrite()write()

オフセットを直接管理するだけです。

残念ながら、pwrite()Linuxで壊れる:

POSIXでは、O_APPENDこのフラグを使用してファイルを開くときにpwrite()データが書き込まれる場所に影響を与えないでください。ただし、Linuxでは、を使用してファイルを開くと、その値O_APPENDpwrite() 関係なく、データがファイルの末尾に追加されます offset

したがって、Linuxではこれを書き換える方法はありませんO_APPEND

おすすめ記事