Cを使用してファイル(またはファイルのグループ)に標準ヘッダーを追加したい。これらのファイルは非常に大きくなる可能性があるため、メモリにロードするか、一時ファイルにコピーすることはお勧めできません(私は思います)。
ヘッダーを各ファイルに直接追加する方法はありますか?
ヘッダー自体は非常に小さく、1KB以下です。
ファイルにデータを挿入することはできません。
ただし、ファイル全体をメモリにロードする必要はありません。新しいファイルを作成し、挿入するデータを書き込んでから、元のファイルの内容を新しいファイルにコピーします(ファイル全体をメモリにロードするのではなく、ブロックごとに実行します)。
最後に、元のファイルを削除し、元のファイルと一致するように新しいファイルの名前を変更します。
これはこれを行うための最も効率的な方法であり、かなり効率的です。
一時ファイルがなくても可能であるはずです。ファイルを最後からブロックごとに読み取り、各ブロックをで書き戻すことができます(original_position + header_size)
。最初のブロックはで書き戻されheader_size
、ヘッダー用のスペースが残ります。
しかし、あなたは本当にこれをしたくありません。中止するとファイルが破損します(ディスク容量不足、その他のI / Oエラー、電源切断など)。
したがって、実際には一時ファイルを使用する必要があります。必要なものをすべて書き込み、元のファイルの名前に名前を変更します(同じファイルシステムに一時ファイルを作成する場合は、コピーする必要があります)。
編集:私が何を意味するかを明確にするために、ファイル全体がRAMに収まるときの単純化された解決策:
ファイルが大きすぎる場合は、小さいバッファを割り当てて、readatおよびwriteatから開始して読み取り/書き込みを繰り返すことができfile_size - buffer_size
ますfile_size - buffer_size + header_size
。次に、次のチャンクをで読み取り、file_size - 2 * buffer_size
で書き込み、というように繰り返しfile_size - 2 * buffer_size + header_size
ます。
ただし、繰り返します。ファイルが失敗すると、ファイルが破損するリスクがあります。