2012-03-14 15 views
1

open/read/writeは低レベルの入出力機能です。とfopen/fread/fwrite?open/read/writeとfopen/fread/writeを使用する必要があります

+0

はstdio関数を呼び出すことを考えてみましょう基礎となるOSが機能するように機能します... C標準ライブラリよりも優れたコードを書くことができると思うなら、自由に行ってください。 –

+0

@Greg Hewgill fopen/fread/fwriteより速くしたいのであれば、自分のI/O機能を実装するためのヒント? –

+0

これはアプリケーションのファイルアクセスパターンに完全に依存します。あなたが順番に読んでいるなら、大きなバッファが必要です。多くの場合、非同期I/Oを使用することができます。あなたが本当に速い別の方法を望むなら、メモリマップされたファイルを検討してください。 –

答えて

5

上位レベルの関数は、使いやすさも提供します。fopen()のような関数は、open()とは異なり、組み込みのI/Oバッファリングを提供します。 I/Oバッファリングにより、fopen()open()よりもはるかに高速です。

上記以外の違いから、あなたはFILE *を持っている場合、あなたはfreadのような関数を使用する必要がありますが、あなただけ、などの書き込み、あなたが読んで使用する必要があり、記述を提出した場合は、fwriteなど

+0

のベンチマークを行うつもりだと思いますが、それは異なる条件下でより速いのですか? –

+2

@MickeyShine:おそらくあなたは見つけるためにベンチマークを作成する必要があります。パフォーマンスが懸念される場合は、後でこれらのベンチマークツールが必要になります。 –

+0

@MickeyShine:グレッグが提案したことを実行してクエリに答える必要があります。通常、多くのシーク操作を実行している場合、I/Oバッファリングはパフォーマンスが低下しますが、ファイルを読み書きする場合はI/Oバッファリングはパフォーマンスに役立ちます。 –