C fopen vs open

LJM:

使用したい理由がありますか(構文上の理由以外)

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場合に使用する特に良い理由はありません必要な場合は、最初からファイルを開くために使用するべきではありませんでしそのため、そのリストに含めることは、他のものとあまり似ていないため、不正確で混乱を招きます。ここで重要な違いはC標準とOS固有のファイル記述子の間であるため、ここでは無視します。fopenopenopenFILE *fdopenFILE *

fopen代わりに使用する主な理由は4つありますopen

  1. fopenでは、バッファリングIOが提供されますopenこれは、実際の処理よりもはるかに高速になる場合があります
  2. fopen ファイルがバイナリモードで開かれていない場合、行末変換を実行します。これは、プログラムが非UNIX環境に移植された場合に非常に役立ちます(ただし、世界はLFのみに収束しているように見えます(IETFテキストベースのネットワークを除く)。 SMTPやHTTPなどのプロトコル))。
  3. A FILE *を使用するfscanfと、その他のstdio関数を使用できます。
  4. ANSI Cのみをサポートし、open関数をサポートしない他のプラットフォームにコードを移植する必要がある場合があります。

私の意見では、行末の翻訳はあなたを助けるよりも頻繁に邪魔になり、構文解析fscanfは非常に弱いので、あなたは必然的にもっと有用なものを優先してそれを投げ出すことになります。

また、Cをサポートするほとんどのプラットフォームにはopen関数があります。

それはバッファリングの問題を残します。主に順次ファイルの読み取りまたは書き込みを行う場所では、バッファリングのサポートが非常に役立ち、速度が大幅に向上します。しかし、データがファイルにあると予想しても、データがファイルに含まれないという興味深い問題が発生する可能性があります。あなたは、fcloseまたはfflush適切な時に覚えておく必要があります。

シークを行っている場合(別名fsetposまたはfseekその2番目は、標準に準拠した方法で使用するには少しトリッキーです)、バッファリングの有用性はすぐに低下します。

もちろん、私のバイアスは、私がソケットをよく使用する傾向があること、そしてFILE *バッファリングなしで頻繁に非ブロッキングIO(まったく合理的な方法でサポートに失敗する)を本当に実行したいという事実です複雑な構文解析要件があるため、私の認識は本当に変わります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Can we open a binary file in C without fopen?

分類Dev

Segfault on fopen c

分類Dev

SwiftMailer'ErrorException 'with message'fopen(/ tmp / ...)failed to open stream:Permissiondenied'

分類Dev

C ++ fopen相対パス

分類Dev

Read file without fopen() (C language)

分類Dev

バイト位置:file_get_contents vs fopen

分類Dev

VS2017 Open Folders - configure 'Compile C' context in tasks.vs.json?

分類Dev

fopenとopenの関係は何ですか?

分類Dev

mmap(c)、fopen(c)、ifstream(c ++)との違いの結果

分類Dev

public static vs open static vs public class vs open class?

分類Dev

Mozilla location service vs open cell id

分類Dev

C / C ++ `!a` vs` a == 0`

分類Dev

普通のC:fopen()でディレクトリを開く

分類Dev

c-ディレクトリを開くfopen?

分類Dev

Cのfopen関数+ファイルへの書き込み

分類Dev

fopenの代わりにCreateFileを使用したC ++シーク

分類Dev

fopenを使用してCでファイルを開く

分類Dev

fopenは、cの配列要素の値を変更します

分類Dev

NDKでは、std :: fstream open()が失敗しますが、fopen()は正しく機能します。なぜですか?

分類Dev

fopen()[function.fopen]エラー

分類Dev

C# vs PowerShell

分類Dev

How to open file in C program?

分類Dev

vs10 C ++ $(MyLibrary)vs%(MyLibrary)

分類Dev

C ++ OpenCV SURF vs SurfFeatureDetector vs SurfDescriptorExtractor

分類Dev

Visual Studio 2019 C_languageでfopen_s(&file、 "filename"、mode)が機能しない

分類Dev

C4996、fopenは非推奨:なぜですか?(注:抑制する方法)

分類Dev

Cのchar(*)の代わりにfopen互換性のない型char(*)[9]

分類Dev

Cファイルプログラムがfopenを実行しない

分類Dev

C fopenはファイル全体をメモリに読み込みますか?

Related 関連記事

  1. 1

    Can we open a binary file in C without fopen?

  2. 2

    Segfault on fopen c

  3. 3

    SwiftMailer'ErrorException 'with message'fopen(/ tmp / ...)failed to open stream:Permissiondenied'

  4. 4

    C ++ fopen相対パス

  5. 5

    Read file without fopen() (C language)

  6. 6

    バイト位置:file_get_contents vs fopen

  7. 7

    VS2017 Open Folders - configure 'Compile C' context in tasks.vs.json?

  8. 8

    fopenとopenの関係は何ですか?

  9. 9

    mmap(c)、fopen(c)、ifstream(c ++)との違いの結果

  10. 10

    public static vs open static vs public class vs open class?

  11. 11

    Mozilla location service vs open cell id

  12. 12

    C / C ++ `!a` vs` a == 0`

  13. 13

    普通のC:fopen()でディレクトリを開く

  14. 14

    c-ディレクトリを開くfopen?

  15. 15

    Cのfopen関数+ファイルへの書き込み

  16. 16

    fopenの代わりにCreateFileを使用したC ++シーク

  17. 17

    fopenを使用してCでファイルを開く

  18. 18

    fopenは、cの配列要素の値を変更します

  19. 19

    NDKでは、std :: fstream open()が失敗しますが、fopen()は正しく機能します。なぜですか?

  20. 20

    fopen()[function.fopen]エラー

  21. 21

    C# vs PowerShell

  22. 22

    How to open file in C program?

  23. 23

    vs10 C ++ $(MyLibrary)vs%(MyLibrary)

  24. 24

    C ++ OpenCV SURF vs SurfFeatureDetector vs SurfDescriptorExtractor

  25. 25

    Visual Studio 2019 C_languageでfopen_s(&file、 "filename"、mode)が機能しない

  26. 26

    C4996、fopenは非推奨:なぜですか?(注:抑制する方法)

  27. 27

    Cのchar(*)の代わりにfopen互換性のない型char(*)[9]

  28. 28

    Cファイルプログラムがfopenを実行しない

  29. 29

    C fopenはファイル全体をメモリに読み込みますか?

ホットタグ

アーカイブ