【发布时间】:2019-01-15 11:58:45
【问题描述】:
我试图通过以下要求来区分文件系统上的文件(假设所有文件都在同一个文件系统中):
- 如果文件 A 被重命名为文件 B,它应该看起来是一样的
- 如果文件 A 被删除然后创建它应该看起来不同
由于我假设所有文件都在同一个文件系统中,因此我倾向于使用inode_number。但它不满足2.这一点。其实:
root@spc:~/test# touch test
root@spc:~/test# ls -li
total 0
2098203 -rw-r--r-- 1 root root 0 Jan 15 14:55 test
root@spc:~/test# rm test
root@spc:~/test# touch test
root@spc:~/test# ls -li
total 0
2098203 -rw-r--r-- 1 root root 0 Jan 15 14:55 test
因此,这两个不同的文件似乎具有相同的 inode 编号。有没有办法为linux/ext4 做到这一点?也许我们可以使用一些文件系统特定的api来存储一些元uid?
【问题讨论】:
-
(st_dev, st_ino, st_gen) 元组就足够了,但不幸的是 st_gen (inode generation number) 没有被内核导出。
statx()调用时考虑过它,但它似乎没有进入它。 -
也就是说,
statx()提供的 (st_dev, st_ino, st_btime) 可能有效。您需要使用来自<sys/syscall.h>的syscall(),并从内核include/linux/uapi/stat.h:struct statx 复制struct statx。
标签: c linux filesystems