入力ファイルと出力ファイルの両方に同じファイル名を使用する可能性をプログラムに追加して、入力ファイルを置き換えることを考えています。
処理されたファイルは非常に大きい可能性があるため、最初にファイルを開き、それを削除して新しいファイルを作成するのが最善の解決策だと思います。つまり、次のようになります。
/* input == output in this case */
FILE *inf = fopen(input, "r");
remove(output);
FILE *outf = fopen(output, "w");
(もちろんエラーハンドリングも追加)
remove()
すべてのシステムで開いているファイルを削除できるわけではないことを認識しており、その場合に失敗する限り、それは許容されます。
開いているファイルを削除して、その内容を読み取れないシステムがないか心配です。
C99 標準では、その場合の動作を「実装定義」として指定しています。SUSはそのケースについてさえ言及していません。
あなたの意見/経験は何ですか? 心配する必要はありますか?そのような解決策を避けるべきですか?
編集: これは主要な機能ではなく、ユーザーが入力ファイルと出力ファイルの両方に同じファイル名を指定した場合の「最後の手段」であることに注意してください。
編集: わかりました、もう 1 つ質問があります: この特定のケースでは、私が提案した解決策は、出力ファイルを書き込み専用で開くだけでなく、より多くの悪を実行できる可能性があります (つまり、上記のように、remove()
呼び出しなしで)。