Производительность fopen vs stat - PullRequest
3 голосов
/ 15 апреля 2010

Я пишу несколько программ на Си для встроенной системы, где каждый бит производительности, который мы можем выжать, будет иметь значение. Часть этого - доступ к файлам журналов. При определении, существует ли файл, есть ли разница в производительности между использованием open / fopen и stat? Я использовал stat, предполагая, что он должен только выполнить быструю проверку файловой системы, тогда как fopen должен был бы фактически получить доступ к файлу и манипулировать внутренними структурами данных перед возвратом. Есть ли в этом заслуга?

Ответы [ 4 ]

6 голосов
/ 15 апреля 2010

stat, вероятно, лучше, поскольку ему не нужно выделять ресурсы для фактического чтения файла. Вам не нужно будет звонить fclose, чтобы освободить эти ресурсы, и вы также можете извлечь выгоду из кэширования недавно проверенных файлов.

Когда сомневаешься, проверь это. Время большого цикла, который проверяет 1000 файлов, используя каждый метод, с соответствующим сочетанием имен файлов, которые существуют и не существуют.

Если у вас есть исходный код для stat и fopen, вы сможете прочитать его и понять, для чего потребуется больше ресурсов.

3 голосов
/ 15 апреля 2010

stat () не создает какие-либо структуры данных на стороне пользователя. Независимо от того, насколько агрессивна ваша политика кэширования, stat не будет пытаться предварительно прочитать данные файла. Я думаю, что stat () безопаснее.

Как насчет доступа ()?

1 голос
/ 15 апреля 2010

Если вы хотите снизить производительность в отношении запросов на существование файлов и открытия файлов, минимизируйте количество вызовов fopen и stat в целом. Вызов файловой системы должен быть намного дороже, чем все, что исполняет среда выполнения, чтобы перевести его.

0 голосов
/ 15 апреля 2010

Только для тестирования существования файла stat () предпочтительнее, чем fopen ().

Однако, в зависимости от ваших настроек, может быть целесообразно использовать lstat () вместо stat ().

...