違い: 1. open は UNIX システム コール関数ですが、fopen は ASIC 標準の C 言語ライブラリ関数です; 2. open は fopen ほど移植性がありません; 3. fopen は通常の通常ファイルのみを操作できます, open は通常のファイル、ネットワークソケットなどを操作できます; 4. open にはバッファリングがありませんが、fopen にはバッファリングがあります。
#このチュートリアルの動作環境: linux5.9.8 システム、Dell G3 コンピューター。
Linux システム: open と fopen の違い
1. ソース
からソース 観点から見ると、この 2 つは非常によく区別できます。これが 2 つの間の最も明白な違いでもあります:
open
は UNIX システム コール関数 (LINUX などを含む)ファイル記述子テーブル内のファイルのインデックスであるファイル説明シンボル (f'd) を返します。
fopen
は、ANSIC 標準の C 言語ライブラリ関数です。システムごとに異なる方法で呼び出す必要があるカーネル API。返されるのは、ファイル構造へのポインタです。
2. 移植性
これは上記のソースから推測できますが、`fopen` は C 標準関数なので移植性が高く、`open` は移植性が制限された UNIX システム コール。 Windows で同様の機能を使用するには、API 関数 `CreateFile` を使用します。
3. 適用範囲
#open
ファイル記述子を返します。ファイル記述子は UNIX システムでは重要な概念です。すべてのデバイスファイル形式で動作します。ネットワークソケット、ハードウェアデバイスなど。もちろん、通常のファイル(レギュラーファイル)の操作も含めて。
fopen は、通常の通常ファイル (通常ファイル) を操作するために使用されます。
4. ファイル IO レベル
ファイル IO の観点から見ると、前者は低レベルの IO 関数であり、後者は高レベルの IO 関数です。 。低レベルと高レベルの簡単な違いは、どちらがシステム カーネルに近いかということです。低レベルのファイル IO はカーネル モードで実行され、高レベルのファイル IO はユーザー モードで実行されます。
5. バッファリング
バッファリング ファイル システム
バッファリング ファイル システムの特徴は次のとおりです。プログラム内のすべてのファイルが使用されます。ファイルの読み取り操作を実行するとき、データはまずディスク ファイルからメモリ「バッファ」に読み込まれ、それがいっぱいになった後、必要なデータがメモリ「バッファ」から読み出されます。 " それに応じて。ファイル書き込み操作を実行する場合、データは最初にメモリ「バッファ」に書き込まれ、次にメモリ「バッファ」がいっぱいになってからファイルが書き込まれます。このことから、メモリ「バッファ」のサイズが実際の外部メモリ操作数に影響を与えることがわかります。メモリ「バッファ」が大きいほど、外部メモリ操作の数が減り、実行速度が速く効率的になります。 。一般に、ファイルの「バッファ」のサイズはマシンによって異なります。 fopen、fclose、fread、fwrite、fgetc、fgets、fputc、fputs、freopen、fseek、ftell、rewind
など。
非バッファ型ファイル システム
バッファ型ファイル システムは、ファイル構造ポインタを使用してファイルを管理し、ファイル ポインタを介してファイルにアクセスします。文字、文字列の読み取りと書き込みが可能です。 、フォーマットされたデータを保存でき、バイナリ データの読み取りと書き込みも可能です。非バッファ ファイル システムはオペレーティング システムに依存します。オペレーティング システムの機能を介したファイルの読み取りと書き込みは、システム レベルの入出力です。ファイル構造ポインタはなく、バイナリ ファイルの読み取りと書き込みのみが可能ですが、 ANSI 標準はバッファなしファイル システムをカバーしなくなったため、これを選択しないことをお勧めします。 open、close、read、write、getc、getchar、putc、putchar
など。
これを一言でまとめると、open
にはバッファリングがなく、fopen
にはバッファリングがあります。前者は read
、write
などと組み合わせて使用され、後者は fread
、fwrite
、などと組み合わせて使用されます。等
fopen
関数を使用すると、ユーザーモードにバッファがあるため、ファイルの読み書き時のユーザーモードとカーネルモードの切り替えが軽減されます(カーネル モード呼び出し システム コール API: read
, write
);
を呼び出し、open
関数を使用する必要があります。ファイルの読み取りと書き込みにかかる時間 カーネル モードとユーザー モードを切り替える必要があります。
は、ファイルが順次アクセスされる場合、fopen
一連の関数が を直接呼び出すよりも高速であることを示しています。 open
一連の関数; ファイルがランダムにアクセスされる場合はその逆が当てはまります。
関連する推奨事項: 「Linux ビデオ チュートリアル 」
以上がLinux の open と fopen の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。