2009-08-25 6 views
0

J'ai récursifs un dossier sur un seul volume, et récupéré une liste de noms, référence compte et numéros d'inodes, en utilisantPourquoi y a-t-il plus de fichiers/hardlinks avec le même iNode que le nombre de références indiqué?

NSFileManager attributesOfItemAtPath

et NSDictionary fileSystemFileNumber et objectForKey: NSFileReferenceCount

Pour certains raison pour laquelle j'obtiens des résultats tels qu'un nombre de référence de 10, mais une liste de beaucoup plus de 10 fichiers avec le même numéro iNode.

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 iNode et le nombre 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 en cours d'écriture est légèrement différente que [dict] offre directe (NSUInteger) fileSystemFileNumber 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 est Dépend de l'exécution du mode 32 ou 64 bits, mais [NSNumber numberWithUnsignedInteger] accepte NSUInteger comme argument, donc je suppose qu'il traite le nombre correctement dans les deux modes.

Je ne vois pas où, dans Activity Monitor, il indique s'il s'agit d'un bit 32/64. Je suppose que quel que soit le projet par défaut pour les projets XCode 3.1.3.

Il est possible qu'il me manque quelque chose ici, car je suis relativement nouveau sur Mac/Obj-C/XCode/Cocoa, donc toute aide/pointeur serait appréciée. Programmeur expérimenté, mais pas dans cet environnement (mais apprendre aussi vite que je peux ....)

+0

Comment imprimez-vous l'inode et votre application fonctionne-t-elle en 64 bits? (Vous pouvez le dire en regardant dans Activity Monitor.) –

+0

@Peter: merci d'avoir regardé ceci - J'ai mis à jour la question pour fournir plus de détails. Vous ne parvenez toujours pas à déterminer où il doit fonctionner en mode 64 bits, sauf si Kind: Intel fournit un indice? – Graza

+0

"Intel" est de 32 bits. "Intel (64-bit)" est 64-bit. Donc, vous affichez ces chiffres dans votre interface utilisateur? –

Répondre

1

Vous recherchez des sauvegardes Time Machine? Y a-t-il des liens de répertoire impliqués?

Si le répertoire A contient des répertoires B1 et B2 qui sont reliés par un lien, un fichier avec le même inode se trouverait à l'intérieur de B1 et B2, mais le nombre de références pourrait être un.

+0

Hmm, bon point - je supposais qu'il n'y avait pas de liens hard de répertoire, mais je vais vérifier cela .... – Graza

+0

Voilà, où le nombre de fichiers avec le même inode était plus grand que le nombre de ref, le nombre d'inodes sur tous les dossiers dans lesquels se trouvaient les fichiers était le même que le nombre de références de l'inode du fichier. Merci – Graza

Questions connexes