Входные и выходные данные ленты
Существует несколько функций, которые приложения могут использовать для выполнения входных и выходных данных (ввода-вывода) на ленточных дисках. Операции ввода-вывода на ленте похожи на операции ввода-вывода, выполняемые на устройстве связи.
При выполнении операций ввода-вывода на ленте некоторые ленточные накопители хранят сведения о встроенном ПО ленты в первых нескольких блоках, как правило, с помощью некоторых частей первых 100 блоков. Приложения не должны использовать эти блоки. Более подробную информацию об этой теме можно получить от отдельных производителей ленточных систем. Как правило, приложение, пропускающее первые 100 блоков на ленте, будет избегать удостоверений диска.
Функции GetTapePosition и SetTapePosition извлекают и перемещают текущую ленту. Функция WriteTapemark записывает указанное количество меток набора, меток файлов, коротких меток файлов и длинных меток файлов. Функция EraseTape удаляет все или часть ленты.
Функции ReadFile и WriteFile функции чтения и записи данных файла из ленты. Данные считываются и записываются в полные блоки. Если размер блока ленты составляет 512 байт, все операции чтения и записи должны использовать буферы, которые являются простыми целыми числами этого размера: 512, 1024, 1536, 2048 и т. д. Большинство, если не все, диски разрешают только операцию записи после повторного перезаключения ленты или после операции чтения создает сообщение об ошибке конца данных.
Чтобы считывать или записывать данные файла в ленту или из ленты в режиме блокировки переменной длины, выполните следующие действия:
- Определите, поддерживает ли ленточный диск режим блокировки переменной длины, вызвав функцию GetTapeParameters и проверяя TAPE_DRIVE_VARIABLE_BLOCK бит FeaturesLow члена возвращаемой структуры TAPE_GET_DRIVE_PARAMETERS.
- Укажите режим размера блока переменной, вызвав функцию SetTapeParameters, установив элемент BlockSize структуры TAPE_SET_MEDIA_PARAMETERS равным нулю. Затем используйте ReadFile или WriteFile для чтения или записи данных файла.
Если ReadFile обнаруживает метку файла, данные до метки считываются и функция завершается ошибкой. (ФункцияGetLastErrorвозвращает код ошибки, указывающий тип обнаруженного файла.) Операционная система перемещает ленту в файловый знак, а приложение может вызывать ReadFile еще раз, чтобы продолжить чтение.
ReadFile и WriteFile чтение и запись только потока данных. Функции BackupRead и BackupWrite считывают и записывают все потоки, связанные с файлом. К ним относятся данные, расширенные атрибуты, безопасность и альтернативные потоки данных. Безопасность и альтернативные потоки данных относятся только к секции файловой системы NTFS.
Функция backupSeek backupSe ek выполняет поиск вперед в файле, к который изначально обращается BackupRead или BackupWrite. Эта функция позволяет приложению пропускать сведения, вызывающие ошибки доступа.
Если приложению требуется доступ только к данным файла, он должен использовать ReadFile и WriteFile. Эти функции также могут считывать альтернативные потоки данных, если потоки были созданы с помощью функции createFile.
Приложение резервного копирования на ленте должно использовать BackupRead и BackupWrite для копирования всех сведений, относящихся к файлу. Однако эти функции не считывают и не записывают характеристики файла, такие как атрибуты, время создания файла и т. д. Приложения должны использовать функции ввода и вывода файла, такие как GetFileAttributes и SetFileAttributes, для получения и задания этих значений.