私は入力ファイルを置き換えるように、入力ファイルと出力ファイルの両方に同じファイル名を使用する可能性を追加することを考えています。オープンファイルを削除するのは安全ですか?
/* input == output in this case */
FILE *inf = fopen(input, "r");
remove(output);
FILE *outf = fopen(output, "w");
を(もちろん、:処理されたファイルとして
が非常に大きくなることがあり、私は最善の解決策は、最初にそのようにそれを削除し、その後、ファイルを開いて、新しいものを作成、すなわちするためにだと思いますエラー処理が追加されました)
すべてのシステムで開かれているファイルを削除できるとは限りませんが、その場合はremove()
が失敗しても問題ありません。
開いているファイルを削除してその内容を読み込めないシステムがなければ心配です。
C99標準では、この場合の動作を「実装定義済み」と指定しています。 SUSはその事件についても言及していない。
あなたの意見は何ですか?私は心配する必要はありますか?私はそのような解決策を避けるべきですか?
EDIT:これはいくつかのメインライン機能ではなく、入力ファイルと出力ファイルの両方に同じファイル名を指定する場合の「最後の手段」であることに注意してください。
EDIT:[OK]を、もう一つ質問:それは、この特定のケースで私が提案した解決策はただすなわち上記けどremove()
のないよう、出力ファイルの書き込みのみを(開口部よりも多くの悪を行うことが可能であることも可能ですコール)。
私の貴重なデータファイルにあなたのアプリケーションを使用しないように注意してください。 –
READMEの専用警告で十分でしょうか、ebuildの 'pkg_postinst()'に追加する必要がありますか? (; –
両方のファイル名が同じであれば間違いなく進んでください。別の名前を入力するようにログやコンソールに警告することはできますか? – vpram86