1

重複の可能性:
既存のコンテンツを上書きせずに、バイナリ ファイルの途中に C を書き込む

バイナリ ファイルの先頭に 1 ~ 64k のデータを挿入する必要があるプログラムを作成しています。insert(fd,buf,len)POSIX API / Linux ABI には関数呼び出しがありません。これを行う最も効率的な方法は何ですか?

4

1 に答える 1

4

選択肢は次のとおりです。

  1. 新しいファイルを作成し、新しいデータを書き込み、古いデータを新しいファイルにコピーしてから、古いファイル (の内容) を新しいファイルに置き換えます。
  2. ファイルの最後からブロックを読み取り、ブロックを新しい位置に繰り返し書き込み、ファイルを逆方向​​に作業します。

(2) の利点は、元のファイルへのシンボリック リンクまたは複数のリンクが壊れないことです。不利な点は ( Keith Thompsonが指摘したように)、中断すると元のファイルが失われることです。

(1) の欠点は、リンクの数を保持してシンボリック リンクを処理する必要がある場合、新しいファイルを古いファイルの上にコピーし直す必要があるため、コピーが増えることです。利点は、コピーがより簡単で、元のファイルが最後まで破壊されないことです。

オプション (2) のコードに関する別の質問があります —既存のコンテンツを上書きせずに、バイナリ ファイルの途中に書き込みます。(バイナリ)ファイルの先頭に挿入することは、ファイルの途中に挿入する特定の(特別ではない)ケースです。

于 2012-10-20T22:06:13.353 に答える