Pourquoi y at-il plus de fichiers / liens physiques avec le même iNode que les émissions de comptage de référence?

StackOverflow https://stackoverflow.com/questions/1329491

  •  19-09-2019
  •  | 
  •  

Question

Je récursifs un dossier sur un seul volume, et récupéré une liste de noms, référence compte et les numéros de inodes, en utilisant

NSFileManager attributesOfItemAtPath

et NSDictionary fileSystemFileNumber et objectForKey: NSFileReferenceCount

Pour une raison quelconque, je reçois des résultats tels que un compte de référence de 10, mais une liste de beaucoup plus de 10 fichiers avec le même numéro d'inode.

Il est à noter que je ne suis pas dans compris des liens symboliques ma liste, je suis un fichier enregistrement ne lorsque [dict typeFichier] == NSFileTypeRegular

Toutes les idées pour lesquelles cela pourrait être le cas?

Edit: @Peter Hosey, j'écris le nombre de iNode et de référence comme suit:

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"];

Notez que la raison iNodeNumber et referenceCount sont écrits de façon légèrement différente est que [dict] offre une fileSystemFileNumber directe (NSUInteger) get-méthode, alors que le fileReferenceCount doit être récupéré à l'aide des touches (selon l'aide que je pouvais trouver sur NSDictionary )

Les deux propriétés de l'entité CLMFile sont Int 64. De ce que je peux dire, le type de NSUInteger dépend si en cours d'exécution en mode 32 ou 64 bits, mais [NSNumber numberWithUnsignedInteger] accepte NSUInteger comme argument, donc je suppose qu'il traite avec le numéro correctement en mode.

Je ne vois pas où dans le Moniteur d'activité, il dit que ce soit peu 32/64. Je suppose que quelle que soit la valeur par défaut pour XCode 3.1.3 projets.

Il est possible que je me manque quelque chose ici, comme je suis relativement nouveau pour Mac / Obj-C / XCode / cacao, de sorte que toute aide / pointeurs seraient appréciés. programmeur expérimenté, mais pas dans cet environnement (si l'apprentissage aussi vite que possible ....)

Était-ce utile?

La solution

Vous regardez les sauvegardes Time Machine? Y at-il des liens durs répertoire impliqués?

Si le répertoire contient des répertoires A B1 et B2 qui sont un lien fixe, un fichier avec le même inode serait à l'intérieur à la fois B1 et B2, mais le nombre de ref pourrait être un.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top