代码之家  ›  专栏  ›  技术社区  ›  Graza

为什么具有相同inode的文件/硬链接比引用计数显示的多?

  •  0
  • Graza  · 技术社区  · 15 年前

    我在一个卷上重现了一个文件夹,并检索了文件名、引用计数和inode编号的列表,使用

    文件管理器属性FiteMatPath

    和nsDictionary文件系统文件编号和对象分叉:nsFileReferenceCount

    出于某种原因,我得到了一些结果,比如引用计数为10,但是列出了许多具有相同inode编号的超过10个文件。

    注意,我的列表中没有包含符号链接,我只在[dict filetype]==nsfiletyperegular时录制文件

    你知道为什么会这样吗?

    编辑:@peter hosey,我正在编写inode和引用计数,如下所示:

    CLMFileManagedObj *clmf;
    clmf = (CLMFileManagedObj *)[NSEntityDescription insertNewObjectForEntityForName:@"CLMFile" inManagedObjectContext:moc];
    
    NSUInteger fsfn = [dict fileSystemFileNumber];
    [clmf setValue:[NSNumber numberWithUnsignedInteger:fsfn] forKey:@"iNodeNumber"];
    [clmf setValue:(NSNumber*)[dict objectForKey:NSFileReferenceCount] forKey:@"referenceCount"];
    

    请注意,InodeNumber和ReferenceCount的编写方式稍有不同,因为[dict]提供了直接(nsinteger)filesystemfilenumber get方法,而fileReferenceCount需要使用键来检索(根据我在nsDictionary上找到的任何帮助)。

    clmfile实体的两个属性都是int 64。据我所知,nsinteger的类型取决于运行的是32位模式还是64位模式,但是[nsnumber numberwithunsignedinteger]接受nsinteger作为参数,因此我假设它在任何一种模式下都能正确处理数字。

    我看不到活动监视器中的位置,它显示是否是32/64位。我假设Xcode3.1.3项目的默认值是什么。

    我可能在这里遗漏了一些东西,因为我对mac/obj-c/xcode/cocoa比较陌生,所以任何帮助/指针都会受到感激。经验丰富的程序员,但不是在这种环境中(尽管我尽可能快地学习…)

    1 回复  |  直到 15 年前
        1
  •  1
  •   Ken    15 年前

    你在看时间机器备份吗?是否涉及目录硬链接?

    如果目录A包含硬链接的目录b1和b2,则具有相同inode的文件将同时位于b1和b2内,但引用计数可以为1。