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 ....)
Comment imprimez-vous l'inode et votre application fonctionne-t-elle en 64 bits? (Vous pouvez le dire en regardant dans Activity Monitor.) –
@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
"Intel" est de 32 bits. "Intel (64-bit)" est 64-bit. Donc, vous affichez ces chiffres dans votre interface utilisateur? –