Entrée et sortie sur bande
Les applications peuvent utiliser plusieurs fonctions pour effectuer des entrées et sorties (E/S) sur un lecteur de bande. Les E/S sur bande sont similaires à celles effectuées sur un appareil de communication.
Lors de l’exécution d’E/S sur bande, certains lecteurs de bandes stockent les informations du microprogramme de bande dans les premiers blocs d’une bande, généralement à l’aide d’une partie des 100 premiers blocs. Les applications ne doivent pas utiliser ces blocs. Des informations plus spécifiques à ce sujet sont disponibles auprès des fabricants de systèmes de bandes individuels. En général, une application qui ignore les 100 premiers blocs sur une bande évite les idiosyncrasies du lecteur de bande.
Les fonctions GetTapePosition et SetTapePosition récupèrent et déplacent la position actuelle de la bande. La fonction WriteTapemark écrit un nombre spécifié de setmarks, filemarks, short filemarks et long filemarks. La fonction EraseTape efface tout ou partie d’une bande.
Les fonctions ReadFile et WriteFile lisent et écrivent des données de fichier depuis et vers la bande. Les données sont lues et écrites dans des blocs complets. Si la taille de bloc de la bande est de 512 octets, toutes les opérations de lecture et d’écriture doivent utiliser des mémoires tampons qui sont des multiples entiers simples de cette taille de bloc : 512, 1024, 1536, 2048, etc. La plupart, sinon la totalité des lecteurs, autorisent une opération d’écriture uniquement une fois la bande rewound ou après qu’une opération de lecture génère un message d’erreur de fin de données.
Pour lire ou écrire des données de fichier vers ou à partir d’une bande en mode bloc de longueur variable, procédez comme suit :
- Déterminez si le lecteur de bande prend en charge le mode bloc de longueur variable en appelant la fonction GetTapeParameters et en vérifiant le bit TAPE_DRIVE_VARIABLE_BLOCK du membre FeaturesLow de la structure TAPE_GET_DRIVE_PARAMETERS retournée.
- Spécifiez le mode de taille de bloc variable en appelant la fonction SetTapeParameters , en définissant le membre BlockSize de la structure TAPE_SET_MEDIA_PARAMETERS sur zéro. Ensuite, utilisez ReadFile ou WriteFile pour lire ou écrire les données du fichier.
Si ReadFile rencontre une marque de fichier, les données jusqu’à la marque de fichier sont lues et la fonction échoue. (La fonction GetLastError retourne un code d’erreur indiquant le type de filemark rencontré.) Le système d’exploitation déplace la bande au-delà de la marque de fichier, et une application peut appeler à nouveau ReadFile pour continuer la lecture.
ReadFile et WriteFile lisent et écrivent uniquement le flux de données. Les fonctions BackupRead et BackupWrite lisent et écrivent tous les flux associés à un fichier. Il s’agit notamment des données, des attributs étendus, de la sécurité et d’autres flux de données. La sécurité et les flux de données alternatifs sont pertinents uniquement sur la partition du système de fichiers NTFS.
La fonction BackupSeek recherche dans un fichier initialement accessible par BackupRead ou BackupWrite. Cette fonction permet à une application d’ignorer les informations qui provoquent des erreurs d’accès.
Si une application doit accéder uniquement aux données de fichier, elle doit utiliser ReadFile et WriteFile. Ces fonctions peuvent également lire d’autres flux de données si les flux ont été créés à l’aide de la fonction CreateFile .
Une application de sauvegarde sur bande doit utiliser BackupRead et BackupWrite pour copier toutes les informations relatives à un fichier. Toutefois, ces fonctions ne lisent pas ou n’écrivent pas de caractéristiques de fichier telles que les attributs, l’heure de création de fichier, etc. Les applications doivent utiliser les fonctions d’entrée et de sortie de fichier, telles que GetFileAttributes et SetFileAttributes, pour récupérer et définir ces valeurs.