Linux Kernel (Ядро линукса) (часть 2)


Анализ пути к родительскому каталогу

Во многих случаях реальной целью операции анализа является не последний, а предпоследний элемент пути. Например, при создании файла последний элемент является именем еще не существующего файла, а предыдущая часть пути указывает на каталог, в котором должна быть создана новая ссылка. Следовательно, операция анализа пути должна возвратить объект элемент каталога” предпоследнего компонента. Другой пример: удаление файла, идентифицируемого путем /foo/bar, состоит в удалении bar из каталога foo. Таким образом, ядру в действительности интересен каталог foo, а не bar.
Флаг lookup parent используется, когда операция анализа должна найти каталог, содержащий последний элемент пути, а не сам этот элемент.

Когда флаг lookup parent установлен, функция iink_path_waik устанавливает также поля last и last type структуры данных nameidata. Поле last содержит имя последнего элемента пути. Поле last type идентифицирует тип последнего элемента. Оно принимает одно из значенийФлаг last root устанавливается функцией path iookup по умолчанию при запуске операции анализа пути Если оказывается, что путь состоит лишь из косой черты, ядро не изменяет значение ПОЛЯ last type.

Остальные значения поля lasttype устанавливаются функцией iink_path_waik), когда установлен флаг lookup_parent. В этом случае функция выполняет шаги, описанные в предыдущем разделе, вплоть до шага 22. Последующая операция обработки последнего элемента пути продолжается по-другому:
1. Функция записывает в поле nd->iast имя последнего элемента.
2. Инициализирует поле nd->iast_type значением last norm.
3. Если последний компонент представлен одиночной точкой ("."), функция записывает в поле nd->iast_type значение last dot.
4. Если последний компонент представлен двумя точками ("."), функция записывает в поле nd->iast_type значение last dotdot.
5. Возвращает значение ноль (нет ошибок).
Нетрудно заметить, что последний элемент не интерпретируется вовсе. Таким образом, когда функция возвращает управление, поля dentry и mnt структуры nameidata указывают на объекты, относящиеся к каталогу, который включает в себя последний элемент пути.

Предыдущая страница | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 | Следующая страница




Возможно, Вас также заинтересует:

ОС Knoppix - это Linux без про...

ВведениеЕсли вы цените свое время, умеете считать деньги и знаете стоимость информации, то эта книга...

Linux Kernel (Ядро линукса) (ч...

Спин-блокировкаСпин-блокировка необходима в многопроцессорной системе, потому что могут возникнуть...

Linux Kernel (Ядро линукса) (ч...

Копирование при записи В системах Unix первых поколений создание процесса было реализовано довольно...

Linux Kernel (Ядро линукса) (ч...

Буферы блоков и головы буферовУ каждого буфера есть дескриптор голова буфера, имеющий тип buffer...