我正在为嵌入式系统编写几个C程序,我们可以挤出的每一点性能都很重要。部分原因是访问日志文件。在确定文件是否存在时,使用open / fopen和stat之间是否有任何性能差异?我一直在使用stat,假设它只需要对文件系统进行快速检查,而fopen必须实际获得访问文件并在返回之前操作内部数据结构。这有什么好处吗?
答案 0 :(得分:6)
stat
可能更好,因为它不必为实际读取文件分配资源。您不必调用fclose
来释放这些资源,也可以从最近检查过的文件的缓存中受益。
如果有疑问,请测试一下。计时使用每种方法检查1000个文件的大循环,并且存在且不存在适当的文件名组合。
如果您拥有stat
和fopen
的源代码,那么您应该能够通读它,并了解哪些内容需要更多资源。
答案 1 :(得分:3)
stat()不会创建任何用户端内存数据结构。无论您的缓存策略多么激进,stat都不会尝试预先读取文件的数据。我认为stat()是一个更安全的赌注。
access()怎么样?
答案 2 :(得分:1)
如果要在查询文件存在和打开文件方面挤出性能,请尽量减少fopen
和stat
次呼叫的数量。对文件系统的调用应该比运行时转换它的任何内容都要昂贵。
答案 3 :(得分:0)
对于仅测试文件存在,stat()优先于fopen()。
但是,根据您的设置,使用lstat()而不是stat()可能是值得的。