[解決済み】C fopenとopenの比較
質問内容
を使いたい理由(構文的なものを除く)はありますか?
FILE *fdopen(int fd, const char *mode);
または
FILE *fopen(const char *path, const char *mode);
ではなく
int open(const char *pathname, int flags, mode_t mode);
Linux環境でC言語を使用する場合?
解決方法は?
まず、特に理由はないのですが、このように
fdopen
もし
fopen
がオプションで
open
は他の可能な選択肢です。を使うべきではなかったのです。
open
を使いたいのであれば、そもそもファイルを開くために
FILE *
. そのため
fdopen
というのも、このリストは他のものとあまり似ていないため、正しくなく、混乱を招くからです。ここで重要なのは、C標準の
FILE *
とOS固有のファイル記述子です。
を使用する主な理由は4つあります。
fopen
の代わりに
open
.
-
fopen
でやっていることよりもずっと速くなる可能性のあるバッファリング IO を提供します。open
. -
fopen
は、ファイルがバイナリモードで開かれていない場合に行末を変換します。 これは、プログラムが非Unix環境に移植される場合に非常に役に立ちます (ただし、世界はLFのみに収束しつつあるようです (SMTP や HTTP などの IETF テキストベースのネットワークプロトコルは除く))。 -
A
FILE *
を使用する機能を提供します。fscanf
といったstdio関数があります。 -
あなたのコードは、いつか ANSI C しかサポートしない他のプラットフォームに移植する必要があるかもしれません。
open
関数を使用します。
私の意見では、行末の翻訳は役に立つというより邪魔になることが多く、パースすることで
fscanf
が弱いので、どうしても捨ててしまって、もっと便利なものに変えてしまうんです。
そして、C言語をサポートするほとんどのプラットフォームでは
open
という関数があります。
残るはバッファリングの問題ですね。 主にファイルを順次読み書きするような場所では、バッファリングのサポートは本当に便利で、大きな速度向上となります。 しかし、バッファリング・サポートは、期待したときにデータがファイルに収まらないという、興味深い問題を引き起こすことがあります。 そのため
fclose
または
fflush
を適切なタイミングで使用します。
シークをする場合(通称
fsetpos
または
fseek
2つ目は標準に準拠した方法で使用するのが少し難しいです)、バッファリングの有用性はすぐに低下してしまいます。
もちろん、私の偏見ですが、私はソケットをよく使うので、ノンブロッキングIOを本当にしたいのです(これは
FILE *
バッファリングが全くなく、複雑なパース処理が必要な場合が多いので、私の認識には大きな違いがあります。
関連
-
[解決済み】エラー:cの入力の最後に期待される宣言またはステートメント
-
[解決済み】メモリー・クロバリング・エラー
-
[解決済み】LinuxのI_PUSHに相当するもの
-
[解決済み】MPI通信でMPI_Bcastを使用する場合
-
[解決済み】int型配列へのポインタのスカラ・イニシャライザの過剰要素
-
[解決済み] Pythonで "with open "を使って複数のファイルを開くにはどうしたらいいですか?
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] Python の open() はファイルが存在しない場合、ファイルを作成しない
-
[解決済み] Linux で非 root プロセスが "特権" ポートにバインドする方法はありますか?
-
[解決済み】正気で、安全で、効率的な方法でファイルをコピーする。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】エラー:cの入力の最後に期待される宣言またはステートメント
-
[解決済み】組み込み関数「malloc」の暗黙の宣言の非互換性
-
[解決済み] clang: error: linker command failed with exit code 1が表示されるのはなぜですか?
-
[解決済み】エラー:イニシャライザー要素がロード時に計算可能でない
-
[解決済み】スレッド1:EXC_BAD_ACCESS(コード=1、アドレス=0x0)標準Cメモリ問題
-
[解決済み】malloc():メモリ破壊
-
[解決済み] char pointers: 'char*' から 'char' への無効な変換?
-
[解決済み] テスト
-
[解決済み】.axfファイルとは何ですか?
-
[解決済み] C言語でファイルサイズを取得するには?[重複]する