Поделиться через


Входные и выходные данные ленты

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

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

Функции GetTapePosition и SetTapePosition извлекают и перемещают текущую ленту. Функция WriteTapemark записывает указанное количество меток набора, меток файлов, коротких меток файлов и длинных меток файлов. Функция EraseTape удаляет все или часть ленты.

Функции ReadFile и WriteFile считывают и записывают данные файлов из ленты. Данные считываются и записываются в полные блоки. Если размер блока ленты составляет 512 байт, все операции чтения и записи должны использовать буферы, которые являются простыми целыми числами этого размера: 512, 1024, 1536, 2048 и т. д. Большинство, если не все, диски разрешают только операцию записи после повторного перезаключения ленты или после операции чтения создает сообщение об ошибке конца данных.

Чтобы считывать или записывать данные файла в ленту или из ленты в режиме блокировки переменной длины, выполните следующие действия:

  1. Определите, поддерживает ли ленточный диск режим блокировки переменной длины, вызвав функцию GetTapeParameters и проверка TAPE_DRIVE_VARIABLE_BLOCK бит элемента FeaturesLow возвращаемой структуры TAPE_GET_DRIVE_PARAMETERS.
  2. Укажите режим размера блока переменной, вызвав функцию SetTapeParameters, задав элемент BlockSize структуры TAPE_SET_MEDIA_PARAMETERS равным нулю. Затем используйте ReadFile или WriteFile для чтения или записи данных файла.

Если ReadFile обнаруживает метку файла, данные до файла считываются и функция завершается ошибкой. (The Функция GetLastError возвращает код ошибки, указывающий тип обнаруженного файла.) Операционная система перемещает ленту в файловый знак, а приложение может снова вызвать ReadFile , чтобы продолжить чтение.

ReadFile и WriteFile считывают и записывают только поток данных. Функции BackupRead и BackupWrite считывают и записывают все потоки, связанные с файлом. К ним относятся данные, расширенные атрибуты, безопасность и альтернативные потоки данных. Безопасность и альтернативные потоки данных относятся только к секции файловой системы NTFS.

Функция BackupSeek выполняет поиск вперед в файле, к которым изначально обращается BackupRead или BackupWrite. Эта функция позволяет приложению пропускать сведения, вызывающие ошибки доступа.

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

Приложение резервного копирования на ленте должно использовать BackupRead и BackupWrite для копирования всех сведений, относящихся к файлу. Однако эти функции не считывают и не записывают характеристики файла, такие как атрибуты, время создания файла и т. д. Приложения должны использовать функции ввода и вывода файла, такие как GetFileAttributes и SetFileAttributes, для получения и задания этих значений.