Entrada y salida de cinta
Hay varias funciones que las aplicaciones pueden usar para realizar entradas y salidas (E/S) en una unidad de cinta. La E/S de cinta es similar a la E/S realizada en un dispositivo de comunicaciones.
Al realizar la E/S de cinta, algunas unidades de cinta almacenan información de firmware de cinta en los primeros bloques de una cinta, normalmente usando algunas partes de los primeros 100 bloques. Las aplicaciones no deben usar esos bloques. Hay información más específica sobre este tema disponible en fabricantes de sistemas de cintas individuales. En general, una aplicación que omite los primeros 100 bloques de una cinta evitará las idiosyncras de unidad de cinta.
Las funciones GetTapePosition y SetTapePosition recuperan y mueven la posición actual de la cinta. La función WriteTapemark escribe un número especificado de marcas de conjunto, marcas de archivo, marcas de archivo cortas y marcas de archivo largas. La función EraseTape borra toda o parte de una cinta.
Las funciones ReadFile y WriteFile leen y escriben datos de archivo desde y en la cinta. Los datos se leen y escriben en bloques completos. Si el tamaño del bloque de la cinta es de 512 bytes, todas las operaciones de lectura y escritura deben usar búferes que sean múltiples enteros simples de ese tamaño de bloque: 512, 1024, 1536, 2048, etc. La mayoría, si no todas, las unidades solo permiten una operación de escritura después de que la cinta se vuelva a mostrar o después de que una operación de lectura genere un mensaje de error de fin de datos.
Para leer o escribir datos de archivo en una cinta en modo de bloque de longitud variable, realice los pasos siguientes:
- Determine si la unidad de cinta admite el modo de bloque de longitud variable llamando a la función GetTapeParameters y comprobando el bit TAPE_DRIVE_VARIABLE_BLOCK del miembro FeaturesLow de la estructura de TAPE_GET_DRIVE_PARAMETERS devuelta.
- Especifique el modo de tamaño de bloque variable llamando a la función SetTapeParameters y establezca el miembro BlockSize de la estructura de TAPE_SET_MEDIA_PARAMETERS en cero. A continuación, use ReadFile o WriteFile para leer o escribir los datos del archivo.
Si ReadFile encuentra una marca de archivo, se leen los datos hasta la marca de archivo y se produce un error en la función. (La función GetLastError devuelve un código de error que indica el tipo de marca de archivo que se encontró). El sistema operativo mueve la cinta más allá de la marca de archivo y una aplicación puede llamar a ReadFile de nuevo para continuar leyendo.
ReadFile y WriteFile solo leen y escriben el flujo de datos. Las funciones BackupRead y BackupWrite leen y escriben todas las secuencias asociadas a un archivo. Estos incluyen datos, atributos extendidos, seguridad y flujos de datos alternativos. La seguridad y los flujos de datos alternativos solo son relevantes en la partición del sistema de archivos NTFS.
La función BackupSeek busca reenviar en un archivo al que se accede inicialmente mediante BackupRead o BackupWrite. Esta función permite a una aplicación omitir la información que provoca errores de acceso.
Si una aplicación necesita tener acceso solo a los datos del archivo, debe usar ReadFile y WriteFile. Estas funciones también pueden leer flujos de datos alternativos si los flujos se crearon mediante la función CreateFile .
Una aplicación de copia de seguridad en cinta debe usar BackupRead y BackupWrite para copiar toda la información relativa a un archivo. Sin embargo, estas funciones no leen ni escriben características de archivo como atributos, tiempo de creación de archivos, etc. Las aplicaciones deben usar las funciones de entrada y salida de archivo, como GetFileAttributes y SetFileAttributes, para recuperar y establecer esos valores.