系统相关
首页 > 系统相关> > 如何将目录路径转换为唯一的数字标识符(Linux / C)?

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

作者:互联网

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

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

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

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

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

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

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

非常感谢,
P

解决方法:

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

但请记住:

>如果移动或重命名目录,则inode编号将“跟随”该目录.如果删除并替换目录,它将更改.
>除了一个或两个非常特殊的目录之外,inode编号在系统之间不会很稳定. (例如,/通常是inode 2.)

标签:c-2,linux,uniqueidentifier,hash
来源: https://codeday.me/bug/20190613/1231974.html