私は組み込みシステム用のいくつかの C プログラムを書いています。そこでは、絞り出すことができるすべてのパフォーマンスが重要になります。その一部は、ログ ファイルへのアクセスです。ファイルが存在するかどうかを判断する場合、 open / fopen と stat の使用にパフォーマンスの違いはありますか? fopen は実際にファイルにアクセスし、内部データ構造を操作してから戻る必要があるのに対し、ファイル システムに対して簡単なチェックを行うだけでよいという前提で stat を使用してきました。これにメリットはありますか?
4 に答える
stat
実際にファイルを読み取るためにリソースを割り当てる必要がないため、おそらくより良いでしょう。これらのリソースを解放するために呼び出すfclose
必要はありません。また、最近チェックしたファイルをキャッシュすることでメリットが得られる場合もあります。
疑わしいときは、試してみてください。存在するファイル名と存在しないファイル名を適切に組み合わせて、各メソッドを使用して 1000 個のファイルをチェックする大きなループの時間を計ります。
stat
とのソース コードがある場合は、fopen
それを読んで、どちらがより多くのリソースを必要とするかを判断できるはずです。
stat() は、ユーザー側のメモリ データ構造を作成しません。キャッシング ポリシーがどれほど積極的であっても、stat はファイルのデータを事前に読み取ろうとしません。stat() の方が安全だと思います。
アクセス()はどうですか?
ファイルの存在のクエリとファイルを開くことに関してパフォーマンスを絞り出したい場合は、一般にfopen
andのstat
呼び出しの数を最小限に抑えます。ファイル システムへの呼び出しは、ランタイムがそれを変換するために行うよりもはるかにコストがかかるはずです。
ファイルの存在のみをテストする場合は、fopen() よりも stat() を使用することをお勧めします。
ただし、設定によっては、stat() の代わりに lstat() を使用する価値がある場合があります。