私が知っている簡単な方法は、新しいファイルを作成し、そこに 3 バイトを書き込んでから、元のファイルを (ループで) メモリに読み込んで、新しいファイルに書き出すことです。
新しいファイルの作成をスキップするか、元のファイルをメモリに読み込んで再度書き戻すことをスキップできる、より高速な方法はありますか?
私が知っている簡単な方法は、新しいファイルを作成し、そこに 3 バイトを書き込んでから、元のファイルを (ループで) メモリに読み込んで、新しいファイルに書き出すことです。
新しいファイルの作成をスキップするか、元のファイルをメモリに読み込んで再度書き戻すことをスキップできる、より高速な方法はありますか?
残念ながら、(POSIX または標準の libc ファイル API を使用して) 既存のファイルにある範囲のバイトを挿入または削除する方法はありません。
これは C に関するものではなく、ファイルシステムに関するものです。データを先頭に追加するためのショートカットを提供する一般的なファイルシステム API は多くないため、一般的には単純な方法が唯一の方法です。
プラットフォームに適した形式のメモリ マップド I/O を使用できる場合がありますが、これは一連の問題と別の問題をトレードオフします (たとえば、ファイル全体をアドレス空間にマップできるか、強制的に中断するかなど)。チャンクにしますか?)。
ファイルを読み取り/書き込みとして開き、最初の 4KB を読み取り、4KB を逆方向にシークし、3 バイトを書き込み、(4KB - 3) バイトを書き込み、ファイルの最後に到達するまでプロセスを繰り返すことができます。