Section courante

A propos

Section administrative du site

Gestion de fichiers sous DOS

Les fonctions de gestion de fichiers DOS sont parmi les plus basiques disponibles pour le programmeur. Ces fonctions sont utilisées pour :

Les systèmes d'exploitation tels que DOS fournissent au programmeur des fonctions de gestion de fichiers. Par exemple, DOS fournit des fonctions qui renvoient des informations spéciales sur les fichiers ou des fonctions pour renommer un fichier. Une particularité de DOS est que ces fonctions existent sous deux formes en raison de la compatibilité combinée CP/M et UNIX. Pour chaque fonction de fichier compatible UNIX, il existe également une fonction de fichier compatible CP/M.

Fonctions FCB

Les fonctions compatibles CP/M sont désignées comme fonctions FCB car elles reposent sur une structure de données appelée FCB (File Control Block). Le DOS utilise cette structure de données pour l'entreposage des informations lors de la manipulation des fichiers. L'utilisateur doit réserver de l'espace pour le FCB dans ce programme. Le FCB permet d'accéder aux fonctions FCB ouvrant, ferment, lisent et écrivent dans des fichiers.

Étant donné que les fonctions FCB ont été développées pour être compatibles avec les fonctions de CP/M et que CP/M n'a pas de système de fichiers hiérarchique, les fonctions FCB ne prennent pas en charge les chemins. Par conséquent, les fonctions FCB ne peuvent accéder qu'aux fichiers se trouvant dans le répertoire courant.

Fonctions de gestion UNIX

Les fonctions de descripteur de fichier compatibles UNIX n'ont pas ce problème. Avec ces fonctions, un descripteur permet d'identifier le fichier auquel accéder. Le DOS stocke des informations sur chaque fichier ouvert dans une zone distincte du programme.

Fonctions du descripteur de fichier

Il est plus facile pour le programmeur d'accéder à un fichier à l'aide des fonctions de descripteur de fichier que d'accéder à un fichier à l'aide des fonctions FCB. Les fonctions du descripteur de fichier ne nécessitent pas qu'un programmeur utilise une structure de données pour l'accès aux fichiers comme le font les fonctions FCB. D'une manière similaire aux fonctions du système d'exploitation UNIX, l'accès aux fichiers s'effectue à l'aide d'un nom de fichier. Le nom de fichier est transmis sous forme de chaîne de caractères ASCII lorsque le fichier est ouvert ou créé pour la première fois. Ceci doit être effectué avant la première opération d'écriture ou de lecture dans le fichier. En plus du nom de fichier, il peut contenir un indicateur de périphérique, un chemin d'accès et une extension de fichier. La chaîne de caractères ASCII se termine par le caractère de fin (code ASCII 0). Une fois le fichier ouvert, une valeur numérique appelée descripteur de fichier (Handle en anglais) est renvoyée. Toutes les autres opérations sur ce fichier sont effectuées à l'aide de ce descripteur de fichier 16 bits. Pour une opération de lecture ou d'écriture ultérieure, le descripteur de fichier et non le nom de fichier est passé à la fonction appropriée.

Pour chaque fichier ouvert, DOS enregistre certaines informations relatives à ce fichier. Si les fonctions FCB sont utilisées, DOS enregistre les informations dans la table FCB dans le bloc de mémoire du programme. Lorsque les fonctions du descripteur de fichiersont utilisées, les informations sont entreposées dans une zone en dehors du bloc de mémoire du programme dans une table maintenue par le DOS. Le nombre de fichiers ouverts est donc limité par la quantité d'espace table disponible. La quantité d'espace table réservée par DOS est spécifiée par le paramètre FILES du fichier CONFIG.SYS :

FILES = x

Dans DOS version 3.0, ce maximum est de 255. Si vous modifiez le nombre maximal de fichiers dans le fichier CONFIG.SYS, la modification n'entrera en vigueur qu'au prochain démarrage de DOS.

FILES

Alors que le paramètre FILES spécifie le nombre maximum de fichiers ouverts pour l'ensemble du système d'exploitation, DOS limite le nombre de fichiers ouverts à 20 par programme. Étant donné que cinq poignées sont attribuées à des périphériques standard tels que le clavier, le moniteur et l'imprimante ligne, seules 15 descripteurs de fichiers sont disponibles pour le programme. Par exemple, si un programme ouvre trois fichiers, DOS attribue trois descripteurs disponibles et réduit de trois le nombre de descripteurs supplémentaires disponibles. Si ce programme appelle un autre programme, les trois fichiers ouverts par le programme d'origine restent ouverts. Si le nouveau programme ouvre des fichiers supplémentaires, le nombre restant de descripteurs disponibles est encore réduit.

Outre les fonctions de lecture et d'écriture standard, il existe également une fonction de positionnement de fichier. Cela vous permet de spécifier un emplacement exact dans le fichier pour le prochain accès aux données. Connaître à la fois un numéro d'enregistrement et la longueur de chaque enregistrement de données vous permet de spécifier la position pour accéder à un enregistrement de données particulier :

position = numéro d'enregistrement * longueur de l'enregistrement

Cette fonction n'est pas utilisée lors de l'accès séquentiel au fichier car DOS définit le pointeur de fichier lors de l'ouverture ou de la création d'un fichier sur le premier octet du fichier. Chaque opération de lecture ou d'écriture suivante déplace le pointeur de fichier du nombre d'octets lus vers la fin du fichier de sorte que le prochain accès me commence là où le précédent s'est terminé.

Le tableau suivant résume les fonctions de descripteur de fichier :

Numéro de fonction Opération
3Ch Crée un fichier
3Dh Ouvrir un fichier
3Eh Ferme un fichier
42h Déplace le pointeur de fichier/détermine la taille du fichier
43h 00h Lecture des attributs du fichier
43h 01h Écriture des attributs du fichier
56h Renomme le fichier
57h 00h Lecture des modifications et de la date et heure du fichier
57h 01h Écriture des modifications et de la date et heure du fichier

Voici quelques règles générales à suivre lors de l'utilisation de ces fonctions :

Fonctions FCB

Comme indiqué précédemment, DOS utilise une structure de données FCB pour gérer un fichier. Le programmeur peut utiliser cette structure de données pour obtenir des informations sur un fichier ou modifier des informations sur un fichier. Pour cette raison, nous examinerons la structure d'un FCB avant de discuter des fonctions FCB individuelles. Le FCB est une structure de données de 37 octets pouvant être subdivisée en différents champs de données. La figure suivante illustre ces champs :

Déplacement Taille Description
+ 00H 1 octet Nom du périphérique
+ 01h 8 octets Nom de fichier
+ 09H 3 octets Mode du fichier
+ 0CH 1 mot Numéro de bloc actuel
+ 0EH 1 mot Taille de l'enregistrement de données
+ 10H 2 mots Taille du fichier
+ 14H 1 mot Date de modification
+ 16H 1 mot Heure de modification
+ 18H 8 octets Réservé
+ 20H 1 octet Numéro d'enregistrement de données actuel
+ 21H 2 mots Numéro d'enregistrement de données pour accès aléatoire

Notez que le nom du fichier est trouvé à partir des déplacements 01h à 0BH du FCB. L'octet au déplacements 0 est l'indicateur de périphérique, 0 est l'unité de disque actuel, 1 l'unité de disque A, 2 l'unité de disque B,...

Le nom de fichier commençant au déplacement 1 est une chaîne de caractères ASCII. Il ne peut pas contenir de chemin car il est limité à 8 caractères. Pour cette raison, les fonctions FCB ne peuvent accéder qu'aux fichiers du répertoire courant. Les noms de fichiers de moins de 8 caractères sont complétés par des espaces (code ASCII 32). L'extension de fichier, le cas échéant, occupe les trois octets suivants du FCB.

Au déplacement 0Ch du FCB est le numéro actuel du bloc pour l'accès séquentiel au fichier. Les deux octets au déplacement 0Eh correspondent à la taille de l'enregistrement. Les quatre octets au déplacement 10h correspondent à la longueur du fichier.

La date et l'heure des dernières modifications du fichier sont entreposées à partir du déplacement 14h du FCB sous forme codée.

Une zone de données de 8 octets suit et est réservée au DOS (aucune modification de l'utilisateur n'est autorisée). L'utilisation de cette zone varie d'une version de DOS à l'autre.

A la suite de cette zone de données réservée se trouve le numéro d'enregistrement actuel étant utilisé en relation avec le numéro de bloc actuel pour simuler les opérations CP/M.

Fichiers aléatoires

Le dernier champ de données du FCB est utilisé pour un type d'accès dans lequel les données dans le fichier peuvent être récupérées ou écrites dans un ordre non séquentiel. Ce champ a une longueur de quatre octets. Si un enregistrement est égal ou supérieur à 64 octets, seuls les trois premiers octets sont utilisés pour indiquer le numéro de l'enregistrement en cours. Les quatre octets de ce champ sont utilisés pour les enregistrements inférieurs à 64 octets.

FCB étendu

Outre un FCB standard, DOS prend également en charge le FCB étendu. Contrairement aux FCB normaux, les FCB étendus accèdent aux fichiers avec des attributs spéciaux, tels que les fichiers cachés ou les fichiers système. De plus, ils autorisent l'accès aux noms de volume et aux sous-répertoires (cela ne signifie pas que vous pouvez accéder aux fichiers dans d'autres répertoires que le répertoire actuel).

Un FCB étendu est similaire à un FCB standard, mais il est plus grand de sept octets. Ces sept octets sont situés au début de la structure de données. Tous les champs suivants sont donc déplacés de sept octets.

Voici la structure d'un FCB étendu :

Déplacement Taille Description
+ 00h 1 octet FF
+ 01h 5 octets Réservé (0)
+ 06h 1 octet Attribut de fichier
+ 07h 1 octet Nom de périphérique
+ 08h 8 octets Nom de fichier
+ 10h 3 octets Extension de fichier
+ 13h 1 mot Numéro de bloc courant
+ 15h 1 mot Taille de l'enregistrement de fichier
+ 17h 2 mots Taille du fichier
+ 1Bh 1 mot Date de modifications
+ 1Dh 1 mot Heure de modifications
+ 1Fh 8 octets Réservé
+ 27H 1 octet Numéro d'enregistrement de données actuel
+ 28H 2 mots Numéro d'enregistrement de données

Le premier octet d'un FCB étendu contient toujours la valeur 255 et l'identifie comme un FCB étendu. Comme cette adresse contient le numéro de périphérique dans un FCB normal et ne peut donc pas contenir la valeur 255, DOS peut faire la différence entre un FCB normal et un FCB étendu. Les cinq octets suivants sont réservés exclusivement à l'utilisation par DOS. Ils ne doivent pas être modifiés. Le septième octet est un octet d'attribut de fichier.

Maintenant que vous êtes familiarisé avec les structures FCB, la section suivante se concentre sur l'utilisation des FCB pour accéder aux fichiers.

FCB et accès aux fichiers

Avant d'accéder à un fichier, un FCB doit être construit dans la zone mémoire du programme. La zone peut être réservée dans le segment de données du programme ou en allouant de la mémoire supplémentaire à l'aide d'une autre fonction DOS.

Bien qu'il soit possible d'écrire les données directement dans le FCB, il est préférable d'utiliser l'une des fonctions DOS appropriées pour ce faire.

Par exemple, pour définir le nom de fichier dans le FCB, vous pouvez utiliser la fonction 29h du DOS. Le numéro de fonction est passé dans le registre AH. L'adresse du FCB est transmise dans la paire de registres ES:DI. L'adresse du nom de fichier est passée dans la paire de registres DS:SI. Le nom de fichier est une chaîne de caractères ASCII terminée par le caractère de fin (code ASCII 0). Le registre AL contient des drapeaux pour convertir le nom de fichier.

FCB ouvert

Une fois le FCB correctement formaté, le fichier peut être ouvert ou créé à l'aide d'une fonction DOS. Lorsque cela se produit, DOS entrepose des informations sur ce fichier dans le FCB, telles que la taille du fichier, la date et l'heure de création du fichier,... À ce stade, le FCB est considéré comme ouvert.

Par défaut, la longueur d'enregistrement est définie sur 128 octets lorsque le FCB est ouvert. Pour remplacer cette longueur d'enregistrement, entreposez la longueur d'enregistrement souhaitée au déplacement 0Eh du FCB après son ouverture. Sinon, la longueur par défaut sera utilisée.

DTA

Pour les longueurs d'enregistrement supérieures à 128 octets, la mémoire tampon d'enregistrement également appelée DTA ou zone de transfert de disque doit être déplacée pour s'adapter à la taille d'enregistrement plus longue. Normalement, DOS construit le DTA dans le PSP (Program Segment Prefix). L'accès au fichier à l'aide du DTA par défaut pour une longueur d'enregistrement supérieure à 128 octets écraserait certains des autres champs du PSP.

La façon la plus pratique de sélectionner une nouvelle DTA est de réserver de l'espace dans le segment de données du programme. Pour modifier l'adresse du DTA, utilisez la fonction DOS 1AH. L'adresse du nouveau DTA est passée dans la paire de registres DS:DX. DOS suppose que vous avez mis de côté une zone suffisamment grande pour accueillir votre plus grande longueur d'enregistrement afin que vous n'ayez pas à spécifier la nouvelle longueur.

Accès aux fichiers

Pour l'accès séquentiel au fichier, le traitement commence au premier enregistrement du fichier. DOS maintient un pointeur d'enregistrement dans le FCB pour garder une trace de l'enregistrement en cours dans le fichier. Chaque fois que le fichier est accédé, DOS avance le pointeur afin que le deuxième, troisième, quatrième,... enregistrement soit traité dans l'ordre.

Pour un accès aléatoire aux fichiers, les enregistrements peuvent être traités dans n'importe quel ordre. La position de chaque enregistrement par rapport au début du fichier détermine son numéro d'enregistrement. Ce numéro d'enregistrement est ensuite transmis au DOS pour accéder à un enregistrement spécifique. Le dernier champ du FCB est utilisé pour spécifier le numéro d'enregistrement au DOS.

Il est également possible de passer du mode d'accès séquentiel au mode d'accès aléatoire et inversement puisque le traitement dépend d'une fonction DOS spécifique pour accéder au fichier. En effet. il existe deux ensembles de fonctions indépendantes, un pour l'accès séquentiel et un pour les fonctions aléatoires.

Voici une liste de toutes les fonctions FCB de l'interruption 21h du DOS.

Numéro de fonction Description
0Fh Ouverture de fichier
10h Fermeture de fichier
13h Supprime le fichier
14h Lecture séquentielle
15h Écriture séquentielle
16h Crée un fichier
17h Renomme un fichier
1Ah Fixe l'adresse DTA
21h Lecture aléatoire (d'enregistrement)
22h Écriture aléatoire (d'enregistrement)
23h Détermine la taille du fichier
24h Fixe le numéro d'enregistrement pour un accès aléatoire
27h Lecture aléatoire (un ou plusieurs enregistrements)
28h Écriture aléatoire (un ou plusieurs enregistrements)
29h Entrez le nom du fichier dans FCB

Quelques règles de base concernant ces fonctions doivent être mentionnées ici :

En utilisant les fonctions FCB, vous pouvez accéder à plusieurs fichiers, chacun avec son propre FCB unique. Pour indiquer à DOS quel fichier doit être accédé, transmettez l'adresse du FCB du fichier dans la paire de registres DS:DX.

La plupart des fonctions renvoient un code d'erreur dans le registre AL ou la valeur zéro si la fonction s'est terminée avec succès. Pour les fonctions ouvrant, ferment, créent ou suppriment un fichier, un code de 255 est renvoyé en cas d'erreur. Les autres fonctions renvoient des codes d'erreur spécifiques. Des informations plus détaillées sur ces erreurs peuvent être déterminées en appelant la fonction 59h de DOS, mais elles ne sont disponibles que dans les versions de DOS V3.0 ou ultérieures.

Descripteur de fichier vs FCB

Une fois que les deux groupes de fonctions mis au périphériques par DOS ont été présentés, les avantages et les inconvénients des fonctions individuelles doivent être brièvement discutés. Pour ceux qui veulent convertir un programme des systèmes d'exploitation CP/M ou UNIX en DOS, le choix sera facile, mais pour ceux voulant développer un nouveau programme sous DOS, cette discussion peut vous aider à décider quel ensemble de fonctions à utiliser.

Descripteur de fichier

Il y a deux avantages principaux à utiliser les fonctions d'un descripteur de fichier. Le premier est la possibilité d'accéder à un fichier dans n'importe quel sous-répertoire du disque. La seconde est que les fonctions d'un descripteur de fichier ne sont pas limitées au nombre de FCB pouvant être entreposés dans l'espace mémoire d'un programme.

Il y a un certain nombre de considérations supplémentaires. Vous ne pouvez accéder au nom d'un unité de disque qu'à l'aide d'un FCB. Lorsque le FCB est ouvert, vous pouvez facilement déterminer la taille de son fichier et la date de la dernière modification. Les fonctions de descripteur de fichier fournissent automatiquement une zone suffisamment grande pour accueillir les enregistrements du fichier.

Comme vous pouvez le voir, il existe des paramètres pour et contre l'utilisation des fonctions FCB ou des fonctions de descripteur de fichier. Pour les futures versions de DOS, les fonctions de descripteur de fichier joueront un rôle plus important et l'importance des fonctions FCB diminuera. C'est une raison suffisante pour utiliser les fonctions de descripteur de fichier pour le développement de votre nouveau programme.



Dernière mise à jour : Lundi, le 23 janvier 2023