Все о моделировании в Компас-3D LT
   Главная Статьи Файлы Форум Ссылки Категории новостей
Июнь 24 2018 00:37:56   
Навигация
Главная
Статьи
Файлы
FAQ
Форум
Ссылки
Категории новостей
Обратная связь
Фото галерея
Поиск
Разное
Карта Сайта
Популярные статьи
Что необходимо ... 65535
4.12.1 Професси... 21743
Примеры, синони... 20924
FAST (методика ... 18450
Учимся удалять!... 18350
Просмотр готовы... 18285
Декартовы коорд... 16436
Просмотр готовы... 15070
Работа с инстру... 11422
Что такое САПР 10868
Сейчас на сайте
Гостей: 1
На сайте нет зарегистрированных пользователей

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

Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ по Delphi
Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog
5.7 СОЗДАНИЕ ФАЙЛА
Системная функция open дает процессу доступ к существующему файлу, а системная функция creat создает в системе новый файл. Синтаксис вызова системной функции creat:
fd = creat(pathname, modes);
где переменные pathname, modes и fd имеют тот же смысл, что и в системной функции open. Если прежде такого файла не существовало, ядро создает новый файл с указанным именем и указанными правами доступа к нему; если же такой файл уже существовал, ядро усекает файл (освобождает все существующие блоки данных и устанавливает размер файла равным 0) при наличии соответствующих прав доступа к нему [16] . На Рисунке 5.12 приведен алгоритм создания файла.
алгоритм creat
входная информация:
имя файла
установки прав доступа к файлу
выходная информация: дескриптор файла
{
получить индекс для данного имени файла (алгоритм namei);
if (файл уже существует) {
if (доступ не разрешен) {
освободить индекс (алгоритм iput);
return (ошибку);
}
}
else { /* файл еще не существует */
назначить свободный индекс из файловой системы (алгоритм ialloc);
создать новую точку входа в родительском каталоге;
включить имя нового файла и номер вновь назначенного индекса;
}
выделить для индекса запись в таблице файлов, инициализировать счетчик;
if (файл существовал к моменту создания) освободить все блоки файла (алгоритм free);
снять блокировку (с индекса);
return (пользовательский дескриптор файла);
}
Рисунок 5.12. Алгоритм создания файла
Ядро проводит синтаксический анализ имени пути поиска, используя алгоритм namei и следуя этому алгоритму буквально, когда речь идет о разборе имен каталогов. Однако, когда дело касается последней компоненты имени пути поиска, а именно идентификатора создаваемого файла, namei отмечает смещение в байтах до первой пустой позиции в каталоге и запоминает это смещение в пространстве процесса. Если ядро не обнаружило в каталоге компоненту имени пути поиска, оно в конечном счете впишет имя компоненты в только что найденную пустую позицию. Если в каталоге нет пустых позиций, ядро запоминает смещение до конца каталога и создает новую позицию там. Оно также запоминает в пространстве процесса индекс просматриваемого каталога и держит индекс заблокированным; каталог становится по отношению к новому файлу родительским каталогом. Ядро не записывает пока имя нового файла в каталог, так что в случае возникновения ошибок ядру приходится меньше переделывать. Оно проверяет наличие у процесса разрешения на запись в каталог. Поскольку процесс будет производить запись в каталог в результате выполнения функции creat, наличие разрешения на запись в каталог означает, что процессам дозволяется создавать файлы в каталоге.
Предположив, что под данным именем ранее не существовало файла, ядро назначает новому файлу индекс, используя алгоритм ialloc (раздел 4.6). Затем оно записывает имя нового файла и номер вновь выделенного индекса в родительский каталог, а смещение в байтах сохраняет в пространстве процесса. Впоследствии ядро освобождает индекс родительского каталога, удерживаемый с того времени, когда в каталоге производился поиск имени файла. Родительский каталог теперь содержит имя нового файла и его индекс. Ядро записывает вновь выделенный индекс на диск (алгоритм bwrite), прежде чем записать на диск каталог с новым именем. Если между операциями записи индекса и каталога произойдет сбой системы, в итоге окажется, что выделен индекс, на который не ссылается ни одно из имен путей поиска в системе, однако система будет функционировать нормально. Если, с другой стороны, каталог был записан раньше вновь выделенного индекса и сбой системы произошел между ними, файловая система будет содержать имя пути поиска, ссылающееся на неверный индекс (более подробно об этом см. в разделе 5.16.1).
Если данный файл уже существовал до вызова функции creat, ядро обнаруживает его индекс во время поиска имени файла. Старый файл должен позволять процессу производить запись в него, чтобы можно было создать «новый» файл с тем же самым именем, так как ядро изменяет содержимое файла при выполнении функции creat: оно усекает файл, освобождая все информационные блоки по алгоритму free, так что файл будет выглядеть как вновь созданный. Тем не менее, владелец и права доступа к файлу остаются прежними: ядро не передает право собственности на файл владельцу процесса и игнорирует права доступа, указанные процессом в вызове функции. Наконец, ядро не проверяет наличие разрешения на запись в каталог, являющийся родительским для существующего файла, поскольку оно не меняет содержимого каталога.
Функция creat продолжает работу, выполняя тот же алгоритм, что и функция open. Ядро выделяет созданному файлу запись в таблице файлов, чтобы процесс мог читать из файла, а также запись в таблице пользовательских дескрипторов файла, и в конце концов возвращает указатель на последнюю запись в виде пользовательского дескриптора файла.)
Комментарии
Нет комментариев.
Добавить комментарий
Пожалуйста залогиньтесь для добавления комментария.
Рейтинги
Рейтинг доступен только для пользователей.

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

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

Пароль



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

Забыли пароль?
Запросите новый здесь.
Случайные статьи
Чтение названий ат...
5.12.5 Примеры
История развития т...
Измерение процессов
5.12.2 Открытие по...
Выполняемые операции
Текст
6. Программные про...
Принцип действия
Глава 9. Royaltek ...
Анализ результатов...
В бой идут одни ст...
ГЛАВА 5. СИСТЕМНЫЕ...
10.5 ВЫВОДЫ
Поддержка сетевых ...
Забытые науки
Администра...
Многоканальная апп...
ГЛОНАСС
5.20 УПРАЖНЕНИЯ
Интернет-система, ...
Страница «Карта»
Протоколы канально...
10.3.4 Опрос терми...
7.4 ОЖИДАНИЕ ЗАВЕР...
Канал (канал связи)
Звук
2.6.3. Сжатие данных
Особенности челов...
Дисциплина идентиф...
Современные акусти...
Автомобильные приб...
12.3.3.2 Wait
Правила для атрибутов
Землемерие
9.1.2.1 Выгрузка п...
6.2 ФОРМАТ ПАМЯТИ ...
Индукция Джона Ст...
3.5 ПРЕИМУЩЕСТВА ...
Сервисное программ...
Мини-чат
Вам необходимо залогиниться.

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