http://qs1969.pair.com?node_id=1107066


in reply to Re: Any way to determine path being monitored with Win32::ChangeNotify?
in thread Anyway to determine path being monitored with Win32::ChangeNotify?

I'm really baffled by how your example works, as NTFS doesn't have inode numbers?

(See the output from stat & lstat, where the inode number is always 0.)

From what I can tell by looking at the ls.c (from the GnuWin project), it (same.c) uses the st_ino field returned by stat:

#define SAME_INODE(Stat_buf_1, Stat_buf_2) \ ((Stat_buf_1).st_ino == (Stat_buf_2).st_ino \ && (Stat_buf_1).st_dev == (Stat_buf_2).st_dev) static bool dev_ino_compare (void const *x, void const *y) { struct dev_ino const *a = x; struct dev_ino const *b = y; return SAME_INODE (*a, *b) ? true : false; }

Which is (in my machine) always 0.


With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
  • Comment on Re^2: Any way to determine path being monitored with Win32::ChangeNotify?
  • Download Code

Replies are listed 'Best First'.
Re^3: Any way to determine path being monitored with Win32::ChangeNotify?
by Discipulus (Canon) on Nov 13, 2014 at 09:06 UTC
    Hello i'm baffled too (but learned new word: baffled) because i knew inode was always 0 on windows.. but effectively the version suggested by Athanasius, ie gnuwin32 return some number while unxutils return 0.
    >touch test.txt > > >which ls.exe >C:\various_stuffs\bin\UnxUtils\usr\local\wbin\ls.exe > >ls -il test.txt 0 -rw-rw-rw- 1 user group 0 Nov 13 09:57 test.tx +t >C:\some_path\GnuWin32\bin\ls.exe -il test.txt >3377699722053632 -rw-rw-rw- 1 lt 0 0 2014-11-13 09:57 test.txt >

    Can someone tell us if we can use reliably this inode number?

    Thanks
    L*
    There are no rules, there are no thumbs..
    Reinvent the wheel, then learn The Wheel; may be one day you reinvent one of THE WHEELS.
      but effectively the version suggested by Athanasius, ie gnuwin32 return some number

      Hm. I've spent an hour going through the ls.c trying to work out what that number might be, but I've failed to find anything that looks a likely source.

      One thing I do know is that it isn't a true inode number, cos they simply do not exist!.

      Which can only mean that they are making it up, though I can't see where.

      I also cannot think of any reliable way to do so. If the based it upon some kind of hashing of the other stat/lstat information, it would change everytime the file was read/written/changed/renamed/....

      Is the number consistent between runs of the gnuwin/ls executable?


      With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
      Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
      "Science is about questioning the status quo. Questioning authority".
      In the absence of evidence, opinion is indistinguishable from prejudice.
        Thanks for your effort. I remember too that inodes simply does not exists on win. Can that number be something derived from Master File Table? i'm guessing only.
        Anyway the number are consistent, more: they are consistent even for hard links, and using stat (maybe next hour inspecting stat.c ;=)..):
        >touch test02.txt >C:\SCRIPTS\GnuWin32-bis\bin\ls.exe -il test02.txt 12666373953464529 -rw-rw-rw- 1 lt 0 0 2014-11-13 11:26 test02.txt >C:\SCRIPTS\GnuWin32-bis\bin\ln test02.txt link-to-test02.txt >C:\SCRIPTS\GnuWin32-bis\bin\ls.exe -il test02.txt link-to-test02.txt 12666373953464529 -rw-rw-rw- 2 lt 0 0 2014-11-13 11:26 link-to-test02 +.txt 12666373953464529 -rw-rw-rw- 2 lt 0 0 2014-11-13 11:26 test02.txt >echo Perl > test02.txt >cat test02.txt Perl >cat link-to-test02.txt Perl >C:\SCRIPTS\GnuWin32-bis\bin\ls.exe -il test02.txt link-to-test02.txt 12666373953464529 -rw-rw-rw- 2 lt 0 7 2014-11-13 11:28 link-to-test02 +.txt 12666373953464529 -rw-rw-rw- 2 lt 0 7 2014-11-13 11:28 test02.txt >C:\SCRIPTS\GnuWin32-bis\bin\stat -c "%i %N" test02.txt 12666373953464529 `test02.txt' >C:\SCRIPTS\GnuWin32-bis\bin\stat -c "%i %N\n" link-to-test02.txt 12666373953464529 `link-to-test02.txt'

        L*
        UPDATE: they state explicitely here:
        st_ino Number of the information node (the inode) for the file (UNIX-specific). On UNIX file systems, the inode describes the file date and time stamps, permissions, and content. When files are hard-linked to one another, they share the same inode. The inode, and therefore st_ino, has no meaning in the FAT, HPFS, or NTFS file systems.

        L*
        UPDATE BIS:
        C:\Windows\system32>fsutil file queryfileid c:\SCRIPTS\test02.txt ID del file: 0x002d00000016a8d1 C:\Windows\system32>fsutil file queryfilenamebyid c:\ 0x002d00000016a +8d1 Nome collegamento causale al file: \\?\C:\SCRIPTS\test02.txt #0x002d00000016a8d1 hex is equal to 12666373953464529 dec (the same nu +mber as above!!!)

        L*
        There are no rules, there are no thumbs..
        Reinvent the wheel, then learn The Wheel; may be one day you reinvent one of THE WHEELS.