ドットドットのiノードIDが更新されたiノードIDを持っていなかったのはなぜですか?


1

私は、子の ".." dentryから親のiノードIDを取得することにより、子ディレクトリからルートにバックトラックする関数を持っています。このバックトラッキングの主な目的は、ユーザーが入力したパスの相対パス名を識別することです。

上記のバックトラッキングを行うための子iノードIDを知っています。しかし、私がそうするとき、私は問題を抱えています、避難後、子供と親ディレクトリは異なるiノード番号のものです。そのため、「..」でバックトレースされた場合、dotdotは、退避後のiノードnoではなく、以前のnoのiノードIDを提供しました。

ドットドットのiノードIDに更新されたiノードIDがなかったのはなぜですか?

回答:


1

私はコメントする評判がありませんので、あなたが何を意味するのかを完全に理解できない場合でも、私はあなたの質問に答えなければなりません

更新されたiノードID

OK、ルートディレクトリから現在のディレクトリへのパスを取得するには、逆方向に進みます。最初に現在のディレクトリのiノード番号を取得する必要があります(.エントリから取得します)。次に、..エントリを介して親ディレクトリに移動し、親ディレクトリで検索して、同じiノード番号を持つディレクトリを探します。最初に持っています。これは、親ディレクトリ内のこのディレクトリエントリの名前です。このようにして、このディレクトリ.が親ディレクトリでどのように呼び出されるかを取得します...この繰り返しを繰り返すと、グランパレントディレクトリ名が取得されます...など、...まで...何?

わかりました。ルートディレクトリには..それ自体を指すエントリがあり(.前回同様)、前回取得したiノード番号とこの反復で取得したiノード番号を比較し、それらが同じiノード番号である場合は停止する必要があります。この特別なディレクトリに到達すると、逆にする必要のある名前のリストが表示され、それらの間にスラッシュ/を挿入すると、実際のディレクトリへのパスが得られます。

ルートファイルシステムにいない場合、カーネルは親ディレクトリに到達するために必要な魔法をかけます(エントリが自分自身を..指していることを無視してマウントポイントを通過..します)。ルートディレクトリへのパスを正しく取得します。あなたはこのmethotをたどることができますので、あなたが得るまで...同じiノードを指します。

これで質問に完全に答えられると思います。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.