2017-11-04 4 views
0

プログラムイベントのストリームを含む保存ファイルがあります。プログラムは、ファイルを読み込んでイベントを実行して、以前の状態を復元することができます(プログラム呼び出し間)。その後、このファイルに新しいイベントが追加されます。"読み取り専用"の後に "書き込み追加"として再オープンする理由はありますか?

ファイルを読み書き(fopen rw)として一度開くことができ、使用パターンを公開することはできません。

しかし、最初に読み込み専用(fopen r)として開いてから、後でappend(freopen a)として再度開くというメリットがあるのだろうかと思います。似たような違いはありますか?

+0

私はあなたがメリットで何を意味するかによって決まります。ファイルが読み取り専用として開かれている場合、別のプロセスでも安全に読み取ることができます。それとも、読み取り専用として開くほうが速いのですか?それはおそらくOSに依存します。特定のタスクのベンチマークを実行できます。私の推測では、パフォーマンスに違いはありません。 –

+0

@BarmakShemirani私は最も広い意味で利益を意味します。パフォーマンス、使用法、機能...他のものを上に推進するかもしれない何か。私は、私のプログラム(使用法)のさまざまな段階で私がファイルに対して行うことをより正確に対応させるので、再オープンに傾いています。 – Andreas

答えて

1

あなたの場合、特別な利点はないかもしれませんが、freopenの主な用途は、標準テキストストリーム(stdin、stdout、stderr)に関連するファイルを変更することです。通常のファイルでifを使用すると、コードの可読性が影響を受けることがあります。あなたの場合、最初は読み取り専用モードで開きますが、ストリームを出力として開いている場合、私たちが念頭に置く必要のあるfreopenについてはほとんどありません。 Linuxの

  1. freopenはは、それがエラーを無視するため
  2. freopenは、出力ストリームに対して使用すべきではないと呼ばれていた前の古いファイルディスクリプタのカーネル構造が完全に初期化されなかったとき、freopenはまた失敗し、EBUSYをerrnoに設定することが古いファイルディスクリプタを閉じます。

GNUマニュアルでfcloseを持つfreopenは、可能なエラー条件についての記事を読む:https://www.gnu.org/software/libc/manual/html_node/Opening-Streams.html#Opening-Streams

+0

は覚えておくべき事柄のために受け入れられました。それらは契約破りです – Andreas

1

いいえファイルを読み取り専用で開いてから、追加モードで再度開いても特筆すべきメリットはありません。プログラムの実行中にファイルを変更する必要がある場合は、モードごとに開く方がよいでしょう。

+0

残念ながら最後の部分をキャッチしませんでした: "...あなたがモードごとにそれを開いた方が良いでしょう" – Andreas

関連する問題