バイナリ ファイルの先頭に 1 ~ 64k のデータを挿入する必要があるプログラムを作成しています。insert(fd,buf,len)
POSIX API / Linux ABI には関数呼び出しがありません。これを行う最も効率的な方法は何ですか?
質問する
784 次
1 に答える
4
選択肢は次のとおりです。
- 新しいファイルを作成し、新しいデータを書き込み、古いデータを新しいファイルにコピーしてから、古いファイル (の内容) を新しいファイルに置き換えます。
- ファイルの最後からブロックを読み取り、ブロックを新しい位置に繰り返し書き込み、ファイルを逆方向に作業します。
(2) の利点は、元のファイルへのシンボリック リンクまたは複数のリンクが壊れないことです。不利な点は ( Keith Thompsonが指摘したように)、中断すると元のファイルが失われることです。
(1) の欠点は、リンクの数を保持してシンボリック リンクを処理する必要がある場合、新しいファイルを古いファイルの上にコピーし直す必要があるため、コピーが増えることです。利点は、コピーがより簡単で、元のファイルが最後まで破壊されないことです。
オプション (2) のコードに関する別の質問があります —既存のコンテンツを上書きせずに、バイナリ ファイルの途中に書き込みます。(バイナリ)ファイルの先頭に挿入することは、ファイルの途中に挿入する特定の(特別ではない)ケースです。
于 2012-10-20T22:06:13.353 に答える