3

我正在为嵌入式系统编写几个 C 程序,我们可以挤出的每一点性能都很重要。其中一部分是访问日志文件。在确定文件是否存在时,使用 open / fopen 和 stat 之间是否存在性能差异?我一直在使用 stat 假设它只需要对文件系统进行快速检查,而 fopen 在返回之前必须实际获得对文件的访问权限并操作内部数据结构。这有什么优点吗?

4

4 回答 4

6

stat可能更好,因为它不必为实际读取文件分配资源。您不必调用fclose来释放这些资源,而且您还可以从缓存最近检查的文件中受益。

当它怀疑时,测试它。计时一个大循环,使用每种方法检查 1000 个文件,并适当混合存在和不存在的文件名。

如果您有 和 的源代码statfopen您应该能够通读它并了解哪些需要更多资源。

于 2010-04-15T16:42:46.183 回答
4

stat() 不会创建任何用户端内存数据结构。无论您的缓存策略多么激进,stat 都不会尝试预读取文件的数据。我认为 stat() 是一个更安全的选择。

访问()怎么样?

于 2010-04-15T16:43:01.790 回答
1

如果您想在查询文件存在和打开文件方面挤出性能,请尽量减少fopenstat调用的数量。对文件系统的调用应该比运行时为翻译它所做的任何事情都要昂贵得多。

于 2010-04-15T16:50:46.203 回答
0

对于仅测试文件是否存在,stat() 将优于 fopen()。

但是,根据您的设置,使用 lstat() 代替 stat() 可能是值得的。

于 2010-04-15T17:29:30.600 回答