Все о моделировании в Компас-3D LT
   Главная Статьи Файлы Форум Ссылки Категории новостей
July 10 2025 03:44:24   
Навигация
Главная
Статьи
Файлы
FAQ
Форум
Ссылки
Категории новостей
Обратная связь
Фото галерея
Поиск
Разное
Карта Сайта
Популярные статьи
Что необходимо ... 65535
4.12.1 Професси... 35781
Учимся удалять!... 32624
Примеры, синони... 23917
Просмотр готовы... 23188
Декартовы коорд... 23081
FAST (методика ... 21933
содержание - се... 21273
Просмотр готовы... 20056
Работа с инстру... 15600
Сейчас на сайте
Гостей: 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. Алгоритм удаления связи файла с каталогом
Комментарии
Нет комментариев.
Добавить комментарий
Пожалуйста залогиньтесь для добавления комментария.
Рейтинги
Рейтинг доступен только для пользователей.

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

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

Пароль



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

Забыли пароль?
Запросите новый здесь.
Случайные статьи
2.2.1. Проводные к...
Как показывать мод...
Глобальная система...
Использование един...
10.4 ПОТОКИ
Глава 2. PocketGPS...
Программы от Palmtop
Загадка INTERPHASE
Глава 14. INTERPHA...
2.7 Сети PDH и SO...
Одноранговые сети
2.6.2. Способы кон...
3. Переосмысление ...
6.5.1 Блокировка о...
1.1. Зрелые и незр...
10.4.1 Более детал...
Инвертированный си...
Личные впечатления...
Индукция Джона Ст...
6.2.2 Страницы и т...
Батарея
Настройки Графичес...
11.2.2 Разделение ...
Вспомогательные ...
Непереносимые связи
Технические подроб...
Как подключить GPS...
1. Общий обзор мет...
Среда передачи данных
Настраиваемые шаблоны
Немного о КПК Mita...
4.1.2 Обращение к ...
Представление
6.5.6 Освобождение...
Детализация опреде...
5.1 Архитектура со...
Глава 6. Подключен...
Свойства САПР отли...
Циклические коды
NavCompanion
Мини-чат
Вам необходимо залогиниться.

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