Разница между номерами инодов os.stat и os.fstat в python - PullRequest
0 голосов
/ 10 января 2019

Я хотел получить inode файла в моей машине с Windows, поэтому сначала я попытался os.stat('./filename.txt').st_ino в моем REPL и вывод, который я получил, был 0L.

Я попробовал то же самое для пары других файлов и получил тот же вывод.

Тогда я попробовал os.fstat(open("filename.txt", "r").fileno()).st_ino и я получил длинное целое число в выводе. Для разных файлов целое число менялось. Итак, я думаю, что os.fstat работал для Windows, а os.stat - нет. Может кто-нибудь объяснить мне причину такого поведения и другие различия между ними?

1 Ответ

0 голосов
/ 10 января 2019

В Python 2 в Windows stat вызывает GetFileAttributesEx или FindFirstFile для получения стандартной информации о файле, включая атрибуты файла (например, каталог, только для чтения), размер и временные метки. fstat вызывает GetFileType (т. Е. Символ, канал, диск) и GetFileInformationByHandle, который предоставляет стандартную информацию плюс номер индекса файла (например, inode в некоторых отношениях, но не совсем), количество жестких ссылок и объем серийный номер (не используется).

Python 2 - это год от конца жизни. Я предлагаю вам обновить до Python 3, который имеет улучшенную stat реализацию для Windows и дальнейшие улучшения в разработке

...