如何将目录路径转换为唯一的数字标识符(Linux/C++)?

pro*_*ber 4 c++ linux hash uniqueidentifier

我正在研究获取目录(文件夹)并获取某种形式的唯一数字标识符的方法.我已经研究过"字符串到散列"方法,但是,Pigeon Hole原则意味着永远不能为每个字符串派生出一个真正唯一的数字.

字符串到唯一哈希是没有用的.

我最近一直在研究实现目标的其他方法,因此有以下问题要问:

目录时间戳 - 它们的"独特性"如何?这里 描述的'stat'报告的时间戳是什么分辨率(第二篇文章)?如果分辨率足够小,多个文件夹是否可以在Linux系统上共享完全相同的时间戳?

如果有人有其他方法/技术他们想分享,我会很乐意听:)

编辑1为了澄清我的用例以回应到目前为止发布的答案:我正在使用Android平台,因此文件系统没有链接到任何其他(当然除了可移动媒体,如Micro SD卡).

我将每个路径插入数据库,但在查询表时尝试避免字符串比较.这里不能使用map/hashmaps.是的,路径本身是唯一的,但理想情况下我需要一个数字标识符,可用于查询表而不是路径本身.标识符每个路径也必须是唯一的.我已经尝试过std :: collat​​e,但发现哈希中有很多碰撞(一个20,000个路径的数据集,大约100个碰撞).更令人惊讶的是,每次我的应用程序运行时,哈希值似乎都大不相同.我想知道它是否以某种方式播种?

非常感谢,P

dus*_*uff 6

在任何基于UNIX的系统上,您可以使用inode编号作为该文件系统中的唯一标识符.将其与设备编号相结合将使其在机器中独一无二.如果您希望它是全局唯一的,您可以输入系统的主MAC地址.

但请记住:

  1. 如果移动或重命名,则inode编号将"跟随"目录.如果删除并替换目录,它将更改.

  2. 除了一个或两个非常特殊的目录之外,inode编号在整个系统中都不稳定.(例如,/通常是inode 2.)