Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1222.doc
Скачиваний:
50
Добавлен:
17.04.2015
Размер:
944.13 Кб
Скачать
      1. Доступ к данным

Windowsпредоставляет прикладным программамAPI-функциюCreateFile, которая может использоваться как для создания нового файла, так и для открытия существующего. В любом случае эта функция создает в системной памяти объект типа «открытый файл», именно потому название функции начинается со слова «Create».

Функция CreateFileможет использоваться для работы с файлами любой файловой системы, поддерживаемойWindows(в частности,FATиNTFS).

Параметры этой функции многочисленны и дают достаточно хорошее представление о возможностях работы с файлами в Windows. Некоторые параметры имеют смысл только дляNTFS(но не дляFAT) или только дляWindowsNT(но не дляWindows95). Список параметров включает в себя следующие параметры.

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

  • Режим доступа. Может быть указан доступ для чтения, для записи или их комбинация.

  • Режим разделения. Он может включать в себя разрешение другим процессам читать файл, записывать данные в файл, удалять файл или любую комбинацию этих разрешений, в том числе, разумеется, и отсутствие всех разрешений.

  • Атрибуты защиты. Их использование будет описано в п. 2.8.4.2.

  • Режим создания. Определяет действия функции в случаях, когда файл с заданным именем уже существует и когда не существует. Определены следующие режимы.

  • CREATE_NEW– Создается новый файл. Если файл уже существует, выдается ошибка.

  • CREATE_ALWAYS– Создается новый файл в любом случае, даже если файл с таким именем уже существует.

  • OPEN_EXISTING– Открывается существующий файл. Выдает ошибку, если файл не существует.

  • OPEN_ALWAYS– Если файл существует, то он открывается, если не существует – создается новый файл.

  • TRUNCATE_EXISTING– Открывается существующий файл, но все его содержимое удаляется. Если файл не существует, выдается ошибка.

  • Большой набор атрибутов и флагов, который следует рассмотреть подробнее. В данном случае атрибутами называются признаки файла, которые устанавливаются при его создании, а флагами – признаки, уточняющие режим работы с открытым файлом.

К атрибутам файла относятся все те, которые Windowsунаследовала отMS-DOS(только для чтения, скрытый, системный, архивный), а также атрибут «сжатый» (т.е. файл, создаваемый вNTFS, будет храниться в сжатом виде) и атрибут «временный». Этот атрибут означает, что файл, вероятно, будет скоро удален, а поэтому система должна попытаться удержать его данные в памяти, не тратя зря время на запись файла на диск.

Флаги функции предоставляют, в частности, следующие возможности:

  • при операциях записи немедленно выполнять запись на диск (очищать кэш-буфера файла);

  • вообще исключить использование кэша для данного файла, всегда записывать и читать секторы данных непосредственно с диска;

  • указать системе желательность оптимальной буферизации для последовательного доступа или, наоборот, для произвольного доступа;

  • открыть файл для выполнения асинхронных операций;

  • указать системе, что файл должен быть автоматически удален сразу же, как только он будет закрыт.

Функция CreateFileвозвращает хэндл открытого файла. Этот хэндл может затем использоваться при обращении к функциям чтения, записи, перемещения указателя, очистки буферов, блокирования фрагментов, закрытия фала и др.

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

Как вы думаете, почему при асинхронных операциях не используется указатель чтения/записи?

Процесс, запустивший асинхронную операцию чтения/записи, может затем проверить ее результат с помощью вызова системной функции, которая, в зависимости от параметров, либо ожидает завершения операции, либо просто проверяет, завершилась ли она. Кроме того, есть возможность связать с завершением асинхронной операции либо событие (event), либо функцию завершения, которая будет вызвана, если операция завершена, а нить процесса, начавшая операцию, вызвала функцию ожидания (см. пп.3.5.5.2, 3.5.5.3 о событиях и функциях ожидания).

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

  • Операции копирования файла или перемещения его на другой диск можно выполнить вызовом одной системной функции, даже не открывая файл. В других ОС подобные операции требуют написания целой процедуры.

  • Специально для замены версий системных программ предусмотрен вариант переименования/перемещения файла с откладыванием фактического выполнения до перезагрузки системы. Иным способом невозможно было бы, например, установить новые версии системных библиотек, поскольку существующие версии постоянно открыты и потому не могут быть удалены иначе как при старте системы.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]