Interruption 21h |
Fonction 3Dh |
Ouvrir un fichier par le Handle |
---|---|---|
DOS 2.0+, OS/2, Windows NT |
Description
Cette fonction permet d'effectuer l'ouverture d'un fichier en utilisant la méthode du Handle. Ainsi, un chemin d'accès ASCIZ ouvre le fichier spécifié dans le répertoire désigné ou par défaut sur l'unité de disque spécifié ou par défaut. Un identificateur de descripteur Handle est retourné pouvant être utilisé par le programme pour un accès ultérieur au fichier.
Entrée
Registre | Valeur ou description | ||
---|---|---|---|
AH | 3Dh | ||
AL | Ce registre permet d'indiquer le mode d'accès : | ||
Bits | Description | ||
0 à 2 | Ce bit indique le mode d'autorisation de la lecture et de l'écriture : | ||
Code | Description | ||
000b | Ce code indique que le fichier peut uniquement être lut | ||
001b | Ce code indique que le fichier peut uniquement être écrit | ||
010b | Ce code indique que le fichier peut être lus et écrit | ||
3 | Ce bit doit toujours être mit à 0 | ||
4 à 6 | Ce bit indique le mode de partage de l'accès au fichier : | ||
Code | Description | ||
000b | Ce code indique qu'uniquement le programme courant peut accéder au fichier en mode FCB | ||
001b | Ce code indique qu'uniquement le programme courant peut accéder au fichier | ||
010b | Ce code indique qu'un autre programme peut lire le fichier mais non l'écrire | ||
011b | Ce code indique qu'un autre programme peut lire et écrit le fichier | ||
7 | Ce bit indique le comportement d'héritage du Handle : | ||
Code | Description | ||
0 | Ce code indique que le programme-enfant du programme courant peut accéder au Handle de ce fichier | ||
1 | Ce code indique que seul le programme courant peut accéder au Handle de ce fichier | ||
DS:DX | Cette paire de registres permet d'indiquer l'adresse du nom de fichier sous forme de chaîne de caractères ASCIZ |
Sortie
Registre | Valeur ou description | |||
---|---|---|---|---|
FC | Ce registre de drapeau de retenue permet d'indiquer le résultat de l'opération : | |||
Valeur | Description | |||
0 | Cette valeur permet d'indiquer que l'ouverture a été un succès, dans ce cas | |||
Registre | Description | |||
AX | Ce registre permet d'indiquer l'identificateur de de descripteur Handle du fichier | |||
1 | Cette valeur permet d'indiquer qu'une erreur s'est produite et dans ce cas : | |||
Registre | Description | |||
AX | Ce registre permet d'indiquer le code d'erreur : | |||
Code | Description | |||
1 | Cette erreur permet d'indiquer que le numéro de la fonction n'est pas valide et que vous n'avez pas de logiciel de partage de fichier | |||
3 | Cette erreur permet d'indiquer que le chemin est introuvable | |||
4 | Cette erreur permet d'indiquer qu'il y a trop de fichiers ouverts simultanément | |||
5 | Cette erreur permet d'indiquer que l'accès est refusé | |||
12 | Cette erreur permet d'indiquer que le code d'accès est incorrecte |
Remarques
- Tout fichier normal, système ou caché avec un nom correspondant sera ouvert par cette fonction. Si le fichier est en lecture seulement, le succès de l'opération dépend également du code d'accès dans les bits de 0 à 2 du registre AL. Après avoir ouvert le fichier, le pointeur de lecture et d'écriture du fichier est défini comme déplacement à zéro (le premier octet du fichier).
- La fonction échoue si : aucun élément du nom de chemin n'existe ou le fichier est ouvert avec un mode d'accès en lecture et écriture et le fichier a l'attribut en lecture seulement. De plus, à partir de la version 3.0 du système d'exploitation DOS, si le programme SHARE.EXE est chargé en mémoire et que le fichier a déjà été ouvert par un ou plusieurs autres processus dans un mode de partage incompatible avec la demande du programme en cours, il peut faire échoué cette fonction.
- La date et l'heure du fichier peuvent être consultées après un appel ouvert réussi avec l'interruption 21h, fonction 57h.
- Les attributs du fichier (caché, système, en lecture seulement ou archive) peuvent être obtenus avec l'interruption 21h, fonction 43h.
- Lorsqu'un descripteur de fichier Handle est hérité par un processus enfant ou est dupliqué avec l'interruption 21h, fonction 45h ou 46h, toutes les restrictions de partage et d'accès sont également héritées.
- A partir de la version 2 du système d'exploitation DOS, seuls les bits de 0 à 2 du registre AL sont significatifs; les bits restants doivent être nuls pour une compatibilité ascendante.
- A partir de la version 3.0 du système d'exploitation DOS, les bits de 4 à 7 du registre AL contrôlent l'accès au fichier par d'autres programmes. Les bits 4 à 6 n'ont aucun effet à moins que le programme SHARE.EXE ne soit chargé en mémoire.
- A partir de la version 3.0 du système d'exploitation DOS, une erreur de partage de fichiers provoque une exception d'erreur critique (Interruption 24h) avec un code d'erreur de 02h. L'interruption 21h, fonction 59h peut être utilisée pour obtenir des informations sur la violation de partage.
- A partir de la version 4.0 du système d'exploitation DOS, l'interruption 21h, fonction 6Ch combine les services des fonctions 3Ch, 3Dh et 5Bh.
Références
La Bible du PC: Programmation système - Sixième Edition, Edition Micro-Application, Michael Tischer, 1996, ISBN: 2-7429-0544-8, page 1524 à 1525.
Aide-mémoire des interruptions du MS-DOS, Edition Marabout, Philippe Mercier, 1990, ISBN: 2-501-01297-6, page 209 à 212.
Dernière mise à jour : Jeudi, le 3 mars 2016