Предыдущий раздел ОПЕРАЦИИ С ФАЙЛАМИ Следующая глава

16.4. Закрытие и уничтожение файла

После того как программа завершила работу с файлом, она может его закрыть. Закрытие файла – операция, обратная открытию файла. В результате ее выполнения освобождаются ресурсы, выделенные для того, чтобы конкретная программа могла работать с конкретным файлом. Сюда относятся системный буфер (буферы), а также логический номер файла. Если закрываемый файл был открыт ранее на запись, то при его закрытии, во-первых, выполняется копирование системного буфера записи в файл на диске. Во-вторых, корректируются атрибуты файла: дата и время последней модификации, размер файла.

В принципе, все файлы, открытые программой, закрываются при ее завершении с помощью системных вызовов, выполняющих возврат в ОС (а точнее – в родительскую программу). Но следующие два фактора способствуют тому, чтобы программа сама выполняла закрытие файла. Во-первых, так как суммарное число открытых файлов ограничено, то освобождение логического номера файла в результате его закрытия позволяет использовать этот номер для другого файла. Во-вторых, так как при закрытии файла производится сброс буфера записи на диск, то это гарантирует правильность данных в файле при аварийном завершении программы.

Если файл больше не нужен не только для текущего выполнения программы, но и для последующего использования, его следует удалить. Удаление файла – операция, обратная созданию файла. В ее результате удаляется запись в родительском каталоге, а также освобождается пространство на носителе ВП, выделенное ранее для файла. Заметим, что удаляемый файл обязательно должен быть закрыт. (В противном случае возможны операции информационного обмена с несуществующим файлом.)

Применительно к FAT удаление файла выполняется следующим образом. Во-первых, первый символ имени файла в родительском каталоге заменяется кодом E5h. Во-вторых, все элементы таблицы FAT, соответствующие кластерам файла, помечаются как свободные. Что касается самих кластеров файла, то их содержимое не меняется до тех пор, пока данный кластер не будет распределен другому файлу.

Следующие системные вызовы DOS используются для закрытия и удаления файлов: “int 21h” (функция 3Eh) и “int 21h” (функция 41h).

int 21h (функция 3Eh) – закрытие файла. Перед применением вызова программа помещает в регистр BX логический номер закрываемого файла. При успешном завершении системного вызова в программу возвращается флаг FC=0.

int 21h (функция 41h) – удаление файла. Перед применением вызова программа помещает в регистры DS и DX соответственно адрес-сегмент и адрес-смещение имени файла, которое задается аналогично функции 3Ch. При успешном завершении системного вызова в программу возвращается флаг FC=0.

 


Предыдущий раздел В начало Следующая глава