3

私は組み込みシステム用のいくつかの C プログラムを書いています。そこでは、絞り出すことができるすべてのパフォーマンスが重要になります。その一部は、ログ ファイルへのアクセスです。ファイルが存在するかどうかを判断する場合、 open / fopen と stat の使用にパフォーマンスの違いはありますか? fopen は実際にファイルにアクセスし、内部データ構造を操作してから戻る必要があるのに対し、ファイル システムに対して簡単なチェックを行うだけでよいという前提で stat を使用してきました。これにメリットはありますか?

4

4 に答える 4

6

stat実際にファイルを読み取るためにリソースを割り当てる必要がないため、おそらくより良いでしょう。これらのリソースを解放するために呼び出すfclose必要はありません。また、最近チェックしたファイルをキャッシュすることでメリットが得られる場合もあります。

疑わしいときは、試してみてください。存在するファイル名と存在しないファイル名を適切に組み合わせて、各メソッドを使用して 1000 個のファイルをチェックする大きなループの時間を計ります。

statとのソース コードがある場合は、fopenそれを読んで、どちらがより多くのリソースを必要とするかを判断できるはずです。

于 2010-04-15T16:42:46.183 に答える
4

stat() は、ユーザー側のメモリ データ構造を作成しません。キャッシング ポリシーがどれほど積極的であっても、stat はファイルのデータを事前に読み取ろうとしません。stat() の方が安全だと思います。

アクセス()はどうですか?

于 2010-04-15T16:43:01.790 に答える
1

ファイルの存在のクエリとファイルを開くことに関してパフォーマンスを絞り出したい場合は、一般にfopenandのstat呼び出しの数を最小限に抑えます。ファイル システムへの呼び出しは、ランタイムがそれを変換するために行うよりもはるかにコストがかかるはずです。

于 2010-04-15T16:50:46.203 に答える
0

ファイルの存在のみをテストする場合は、fopen() よりも stat() を使用することをお勧めします。

ただし、設定によっては、stat() の代わりに lstat() を使用する価値がある場合があります。

于 2010-04-15T17:29:30.600 に答える