Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 在运行时为文件指定唯一的编号_C_Linux - Fatal编程技术网

C 在运行时为文件指定唯一的编号

C 在运行时为文件指定唯一的编号,c,linux,C,Linux,我想在运行时为文件分配唯一的文件号 为文件名创建哈希对我来说不是一个选项,因为我不希望发生任何冲突 一个好的选择是为所有文件创建运行编号。但我没有访问源文件的权限,无法在运行二进制文件的地方遍历目录 所以我需要一些可以从二进制文件中提取文件名的选项(比如使用类似于GDB的符号表)。我不知道该怎么做。任何帮助都会收到您可以尝试从文件本身使用inode编号(st_ino)——您可以通过使用fstat()获得该编号 inode编号是文件系统跟踪文件的方式,它们对于给定的文件系统是唯一的——因此,只要文

我想在运行时为文件分配唯一的文件号

  • 为文件名创建哈希对我来说不是一个选项,因为我不希望发生任何冲突

  • 一个好的选择是为所有文件创建运行编号。但我没有访问源文件的权限,无法在运行二进制文件的地方遍历目录


  • 所以我需要一些可以从二进制文件中提取文件名的选项(比如使用类似于GDB的符号表)。我不知道该怎么做。任何帮助都会收到

    您可以尝试从文件本身使用inode编号(st_ino)——您可以通过使用fstat()获得该编号

    inode编号是文件系统跟踪文件的方式,它们对于给定的文件系统是唯一的——因此,只要文件不位于不同的文件系统(不同的装入点),inode编号就是唯一的


    这包括是否有多个指向同一文件的链接,如果这也让您担心。

    使用日期和时间,我怀疑您是否会有重复的链接:)您仍然需要一个哈希,而不是一个完全依赖于名称的哈希。您的文件号是什么,您希望它们如何唯一?你知道和吗?看起来你的问题可能没有意义。你能举例说明一下在你的情况下什么是唯一的文件号吗?如果有多个硬链接,它们将具有相同的inode<代码>触摸a;lnab;ls-i a b来证明这一点。是的——多个链接(硬链接或软链接)指向同一个文件——它们是同一个文件,这就是重点——因此,如果正确理解OPs问题,它们应该具有相同的id号。我以为您打算声明多个链接具有不同的索引节点。不过,多个软链接确实有不同的索引节点<代码>触摸a;ln-sab;ln-sac;ls-i显示了这一点。如果这是一个问题,lstat()解决了它。我明确指出他应该使用fstat——使用fstat,您提供了一个fd,这意味着您已经打开了文件,您将获得实际文件的inode编号。您的测试无效,因为您获取的是符号链接的索引节点号,而不是实际文件。尝试执行“ls-iH”,您将看到实际文件的inode(不是符号链接名)是相同的,无论您使用硬链接还是软链接。(一个常见的错误是将文件名视为文件本身——你可以有没有名称的文件,而名称只是文件的链接。)你的语气似乎表明你被冒犯了,因此如果你对我说的话感到不安,我道歉。我不是在和你争论,但你的语气表明你在激烈地同意我。