1

У меня есть функция, которая возвращает обратно из дочернего каталога в корень, получая идентификатор inode родительского объекта из ".." dentry дочернего объекта. Основная цель этого обратного отслеживания состоит в том, чтобы идентифицировать относительное имя пути, введенного пользователем.

Я знаю идентификатор дочернего узла, чтобы выполнить вышеуказанный возврат. но у меня возникает проблема, когда я это делаю, после эвакуации дочерний и родительский каталоги имеют разные номера инода. поэтому при возврате с помощью «..» dotdot дал идентификатор inode предыдущего no, а не inode no после эвакуации.

почему у inode-идентификатора dotdot нет обновленного inode-идентификатора?

1 ответ1

1

У меня нет репутации, чтобы комментировать, поэтому я должен ответить на ваш вопрос, даже если я не могу полностью понять, что вы имеете в виду

обновленный идентификатор inode

Хорошо, чтобы получить путь от корневого каталога до каталога, в котором вы находитесь, мы идем в обратном направлении. Вы должны сначала получить номер инодов каталога , вы находитесь на (вы получите его от . А затем получить родительский каталог через .. запись , а затем искать в родительском каталоге ищет каталог , который имеет то же самое номер инода, который вы получили в начале. Это имя этой записи каталога в родительском каталоге. Таким образом, вы получите, как этот каталог . вызывается в родительском каталоге ... повторяя эту итерацию, вы получите имя родительского каталога ... и так далее, пока .... что?

Хорошо, в корневом каталоге есть запись .. которая указывает на себя (как . Делает), и вы должны сравнить номер инода, который вы получили в прошлый раз, с номером, который вы получили в этой итерации, и остановиться, если они совпадают с номером инода , Как только этот специальный каталог достигнет, у вас будет список имен, которые вы должны изменить, поместите косые черты / между ними, и вы получите путь к фактическому каталогу.

Если вы не находитесь в корневой файловой системе, ядро создает магию, необходимую для перехода в родительский каталог (он следует за записью .. через точки монтирования, игнорируя, что запись .. указывает на себя), и вы получите путь к Корневой каталог правильно, так что вы можете следовать этому методу, пока не получите . и .. указывая на тот же индекс.

Я ожидаю, что это полностью отвечает на ваш вопрос.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .