مشكلة في st_ino

pythogrammer

ﻻحظت أن هناك فرق بين النتائج حيث أن اﻷمر

ls -li

يعطي هذه النتيجة:

total 0
13636392 -rw-rw-r-- 2 me me 0 Jul 21 00:12 hard-link
13636392 -rw-rw-r-- 2 me me 0 Jul 21 00:12 myFile
13633891 lrwxrwxrwx 1 me me 6 Jul 21 00:50 soft-link -> myFile

لكن الكود هذا يعطي:

import os

files = ['myFile', 'hard-link', 'soft-link']
for f in files:
    print(os.stat(f).st_ino, f)

هذه النتيجة:

13636392 myFile
13636392 hard-link
13636392 soft-link

ما هي المشكلة؟


استبدل stat(f).st_ino بـ lstat(f).st_ino.

السبب لأن stat يظهر بيانات الملف الأصلي و لكن lstat يظهر بيانات الرابط link بدلا من الملف الأصلي.

هذا الرابط يشرح الفرق و هذا الناتج

>>> for f in files: print(os.stat(f).st_ino, f)
...
(793036, 'hard-link')
(793036, 'myFile')
(793036, 'soft-link')

>>> for f in files: print(os.lstat(f).st_ino, f)
...
(793036, 'hard-link')
(793036, 'myFile')
(793035, 'soft-link')