Warum gibt es mehrere Dateien / Hardlinks mit dem gleichen Inode als die Referenzzähler zeigt?
-
19-09-2019 - |
Frage
Ich habe einen Ordner auf einem einzigen Band rekursiv, und eine Liste von Dateinamen, Referenz-Zählungen und Inode-Nummern abgerufen wird, mit
NSFileManager attributesOfItemAtPath
und NSDictionary fileSystemFileNumber und objectForKey: NSFileReferenceCount
Aus irgendeinem Grund bin ich Ergebnisse wie eine Referenzzahl von 10 bekommen, aber eine Liste von vielen mehr als 10 Dateien mit dem gleichen Inode-Nummer.
Bemerkenswert ist, dass ich nicht Symlinks in meiner Liste einschließlich, ich bin die Aufnahme nur eine Datei, wenn [dict Dateityp] == NSFileTypeRegular
Irgendwelche Ideen, warum dies der Fall sein könnte?
Edit: @ Peter Hosey, ich schreibe die Inode und Referenzzähler wie folgt:
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"];
Beachten Sie, dass der Grund iNodeNumber und referenceCount etwas anders geschrieben werden, ist, dass [dict] bietet eine direkte (NSUInteger) fileSystemFileNumber get-Methode, während die fileReferenceCount abgerufen werden muß Tasten (nach einer Hilfe, die ich auf NSDictionary finden konnte, )
Beide Eigenschaften des CLMFile Einheit sind Int 64. Von dem, was ich sagen kann, ist NSUInteger der Art abhängig, ob mit einem 32 oder 64-Bit-Modus, aber [NSNumber numberWithUnsignedInteger] akzeptiert NSUInteger als Argument, so nehme ich an würde sie beschäftigt mit der Nummer richtig in jedem Modus.
Ich kann nicht sehen, wo in Activity Monitor sagt, ob es 32/64 Bit. Ich würde davon ausgehen, was auch immer die Standardeinstellung für XCode 3.1.3 Projekte sind.
Es ist möglich, dass ich hier etwas fehlt bin, da ich relativ neu bin auf Mac / Obj-C / XCode / Kakao, so dass jede Hilfe / Zeiger würde geschätzt. Erfahrene Programmierer, aber nicht in dieser Umgebung (obwohl kann so schnell, wie ich lernen ....)
Lösung
Suchen Sie auf Time Machine-Backups? Gibt es Verzeichnis harte Links beteiligt?
Wenn Verzeichnis A enthält Verzeichnisse B1 und B2, die hardlinked sind, wird eine Datei mit dem gleichen Inode wäre sowohl innerhalb als B1 und B2, doch der Schiedsrichter den Zählwert eins sein könnte.