Por que há mais arquivos / hardlinks com o mesmo iNode do que os shows contagem de referência?

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

  •  19-09-2019
  •  | 
  •  

Pergunta

Eu recursed uma pasta em um único volume, e recuperou uma lista de nomes de arquivos, referência contagens e números de inode, usando

NSFileManager attributesOfItemAtPath

e NSDictionary fileSystemFileNumber e objectForKey: NSFileReferenceCount

Por alguma razão eu estou recebendo resultados, como uma contagem de referência de 10, mas uma lista de muitos mais do que 10 arquivos com o mesmo número de inode.

De nota é que eu não estou incluindo links simbólicos em minha lista, eu só estou gravando um arquivo quando [Dict fileType] == NSFileTypeRegular

Todas as ideias por que isso pode ser o caso?

Edit: @ Peter Hosey, estou escrevendo o iNode e contagem de referência da seguinte forma:

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

Note que a razão iNodeNumber e referenceCount estão sendo escritas de forma ligeiramente diferente é que [Dict] ofertas a direta (NSUInteger) fileSystemFileNumber get-método, enquanto o fileReferenceCount precisa ser recuperada usando as chaves (de acordo com qualquer ajuda que eu poderia encontrar em NSDictionary )

Ambas as propriedades da entidade CLMFile são Int 64. Do que eu posso dizer, tipo de NSUInteger depende se o modo de 32 ou 64 bits em execução, mas [NSNumber numberWithUnsignedInteger] aceita NSUInteger como argumento, então eu diria que se trata com o número corretamente em qualquer modo.

Não consigo ver onde no Activity Monitor diz se é 32/64 bit. Eu diria que qualquer que seja o padrão para XCode 3.1.3 projetos são.

É possível que eu estou faltando alguma coisa aqui, como eu sou relativamente novo para Mac / Obj-C / Xcode / cacau, por isso qualquer ajuda / ponteiros seria apreciada. programador experiente, mas não neste ambiente (embora a aprender mais rápido que eu puder ....)

Foi útil?

Solução

Você está olhando para backups Time Machine? Estão lá hardlinks diretório envolvido?

Se o diretório A contém diretórios B1 e B2 que são hardlinked, um arquivo com o mesmo inode estaria dentro ambos B1 e B2, mas a contagem de referência pode ser um.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top