なぜ、参照カウントが示すよりも、同じiノードを持つ複数のファイル/ハードリンクがあるのですか?

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

  •  19-09-2019
  •  | 
  •  

質問

私が使用して、単一のボリューム上のフォルダを再帰、およびファイル名、参照カウントとiノード番号のリストを取得しています。

NSFileManager attributesOfItemAtPath

とNSDictionaryのfileSystemFileNumberとobjectForKey:NSFileReferenceCount

何らかの理由で私は、このような10の参照カウントが、同じinode番号を持つ多くの10個の以上のファイルのリストとして結果を取得しています。

注目すべきことは、私は私のリストでシンボリックリンクを含めておりませんということですが、私は唯一のファイルを記録していたときに[辞書のfileType] == NSFileTypeRegular

このようなケースかもしれない理由を任意のアイデア?

編集:次のように@Peter Hosey、I、iノードと参照回数を書いてます:

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

iNodeNumberとreferenceCountが若干異なる書かれている理由はfileReferenceCountキーを使用して取得する必要があり、一方、[辞書]は、直接(NSUInteger)fileSystemFileNumber取得-方法を提供することであることに注意してください(私はNSDictionaryの上で見つけることができる任意のヘルプによると)

CLMFileエンティティの両方の性質は、私が言うことができるものからのInt 64あり、NSUIntegerのタイプは、実行中の32または64ビット・モードが、[のNSNumber numberWithUnsignedInteger]は引数としてNSUIntegerを受け入れるかどうかに依存しているので、私はそれを扱うと仮定したいですどちらのモードでも正しく番号付きます。

アクティビティモニタで、それはそれは32/64ビットのかどうかと言うここで、

私は見ることができません。私は3.1.3プロジェクトがあるXCodeのためにどのようなデフォルトを前提と思います。

これは私がそう任意のヘルプ/ポインタが認識されるであろう、マック/ OBJの-C / XCodeの/ココアへの比較的新しいんだと私は、ここで何かが欠けてることが可能です。経験豊富なプログラマではなく、この環境では(早く私ができるように学習けれども....)

役に立ちましたか?

解決

あなたはTime Machineバックアップを見ていますか?関連するディレクトリのハードリンクはありますか?

ディレクトリAは、ハードリンクされているディレクトリのB1とB2が含まれている場合は、

、同じiノードを持つファイルは、B1とB2の両方の内側になり、まだ参照カウントが1である可能性があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top