Все о моделировании в Компас-3D LT
   Главная Статьи Файлы Форум Ссылки Категории новостей
Май 27 2018 18:19:53   
Навигация
Главная
Статьи
Файлы
FAQ
Форум
Ссылки
Категории новостей
Обратная связь
Фото галерея
Поиск
Разное
Карта Сайта
Популярные статьи
Что необходимо ... 65535
4.12.1 Професси... 21707
Примеры, синони... 20898
FAST (методика ... 18364
Просмотр готовы... 18155
Учимся удалять!... 17574
Декартовы коорд... 16241
Просмотр готовы... 14953
Работа с инстру... 11364
Что такое САПР 10832
Сейчас на сайте
Гостей: 1
На сайте нет зарегистрированных пользователей

Пользователей: 9,955
новичок: Logyattella
Друзья сайта
Ramblers Top100
Рейтинг@Mail.ru

Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ по Delphi
Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog
5.16 UNLINК
Системная функция unlink удаляет из каталога точку входа для файла. Синтаксис вызова функции unlink:
unlink(pathname);
где pathname указывает имя файла, удаляемое из иерархии каталогов. Если процесс разрывает данную связь файла с каталогом при помощи функции unlink, по указанному в вызове функции имени файл не будет доступен, пока в каталоге не создана еще одна запись с этим именем. Например, при выполнении следующего фрагмента программы:
unlink("myfile");
fd = open("myfile", O_RDONLY);
функция open завершится неудачно, поскольку к моменту ее выполнения в текущем каталоге больше не будет файла с именем myfile. Если удаляемое имя является последней связью файла с каталогом, ядро в итоге освобождает все информационные блоки файла. Однако, если у файла было несколько связей, он остается все еще доступным под другими именами.
Рисунок 5.30. Взаимная блокировка процессов при выполнении функции link
На Рисунке 5.31 представлен алгоритм функции unlink. Сначала для поиска файла с удаляемой связью ядро использует модификацию алгоритма namei, которая вместо индекса файла возвращает индекс родительского каталога. Ядро обращается к индексу файла в памяти, используя алгоритм iget. (Особый случай, связанный с удалением имени файла».», будет рассмотрен в упражнении). После проверки отсутствия ошибок и (для исполняемых файлов) удаления из таблицы областей записей с неактивным разделяемым текстом (глава 7) ядро стирает имя файла из родительского каталога: сделать значение номера индекса равным 0 достаточно для очистки места, занимаемого именем файла в каталоге. Затем ядро производит синхронную запись каталога на диск, гарантируя тем самым, что под своим прежним именем файл уже не будет доступен, уменьшает значение счетчика связей и с помощью алгоритма iput освобождает в памяти индексы родительского каталога и файла с удаляемой связью.
При освобождении в памяти по алгоритму iput индекса файла с удаляемой связью, если значения счетчика ссылок и счетчика связей становятся равными 0, ядро забирает у файла обратно дисковые блоки, которые он занимал. На этот индекс больше не указывает ни одно из файловых имен и индекс неактивен. Для того, чтобы забрать дисковые блоки, ядро в цикле просматривает таблицу содержимого индекса, освобождая все блоки прямой адресации немедленно (в соответствии с алгоритмом free). Что касается блоков косвенной адресации, ядро освобождает все блоки, появляющиеся на различных уровнях косвенности, рекурсивно, причем в первую очередь освобождаются блоки с меньшим уровнем. Оно обнуляет номера блоков в таблице содержимого индекса и устанавливает размер файла в индексе равным 0. Затем ядро очищает в индексе поле типа файла, указывая тем самым, что индекс свободен, и освобождает индекс по алгоритму ifree. Ядро делает необходимую коррекцию на диске, так как дисковая копия индекса все еще указывает на то, что индекс используется; теперь индекс свободен для назначения другим файлам.
алгоритм unlink
входная информация: имя файла
выходная информация: отсутствует
{
получить родительский индекс для файла с удаляемой связью (алгоритм namei);
/* если в качестве файла выступает текущий каталог… */
if (последней компонентой имени файла является ".")
увеличить значение счетчика ссылок в индексе;
else получить индекс для файла с удаляемой связью (алгоритм iget);
if (файл является каталогом, но пользователь не является суперпользователем) {
освободить индексы (алгоритм iput);
return (ошибку);
}
if (файл имеет разделяемый текст и текущее значение счетчика связей равно 1)
удалить записи из таблицы областей;
в родительском каталоге:
обнулить номер индекса для удаляемой связи;
освободить индекс родительского каталога (алгоритм iput);
уменьшить число связей файла;
освободить индекс файла (алгоритм iput);
/* iput проверяет, равно ли число связей 0, если да, освобождает блоки файла (алгоритм free) и освобождает индекс (алгоритм ifree); */
}
Рисунок 5.31. Алгоритм удаления связи файла с каталогом
Комментарии
Нет комментариев.
Добавить комментарий
Пожалуйста залогиньтесь для добавления комментария.
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Случайные статьи
10.3.1 Символьные ...
Перепроектирование...
Глава четвертая
Строка текущего со...
Глава 12. BOTTOM L...
2.3.2.3 Факсимильн...
3. Обзор концепции...
Измерения и анализ
Настройки телефона...
Глава 8. HUMMINBIR...
Компьютерные файлы
Определение атрибута
Разъем данных
Выводы по GPS-комп...
БИБЛИОГРАФИЯ
Внешний вид
Цена до 300 долларов
Канал (канал связи)
Опции QoS
Порядок сборки
Управление програм...
Цена до 350 долларов
5.5 УКАЗАНИЕ МЕСТА...
DVD-приводы
Быстрое продление ...
Cetus GPS
Цена до 250 долларов
2.2.3. Понимание у...
10.4.1 Более детал...
Постоянное обновление
7.2.2. Необходимые...
Глава 6. GPS для ...
Имена сущностей
7. Размер процесса...
ВВЕДЕНИЕ
Благодарности
Введение
3.4 Управление пе...
Производители нара...
Карты и программно...
Мини-чат
Вам необходимо залогиниться.

Нет присланных сообщений.
Copyright © 2009