Les périphériques en mode console sont traités comme s'il s'agissait de fichiers.
On les désigne par leur "nom d'unité" éventuellement suivi de deux points
comme quand il s'agit de disques ou de disquettes (A: ,B: ,C:, D: ...)
Un nom d'unité est un nom réservé qui s'utilise de la même manière qu'un
nom de fichier.
CON : est le nom d'unité de la console. En lecture, il se rapporte au clavier, en écriture, il fait référence à l'écran.
Pour s'en convaincre vous pouvez essayer d'afficher le contenu d'un fichier texte par la commande
COPY EXEMPLE.TXT CON:
Cette commande aura le même effet que la commande TYPE EXEMPLE.TXT
De même COPY CON: SAISIE.TXT va enregistrer dans le fichier " SAISIE.TXT " tous les caractères que vous taperez ensuite au clavier. Il faudra terminer par le caractère [Ctrl+Z] pour mettre fin à cette saisie.
NUL est le nom d'un fichier fictif pouvant servir de destination pour des messages que l'on veut annuler. On s'en servira lors des écritures de fichier de commandes.
Les unités PRN, LPT1, ... AUX, COM1, ... COM4 étaient accessibles sous DOS et le sont restées, en mode invite de commande, jusqu'à la version 98 de Windows. L'écriture ou la lecture de ces unités est rendue impossible sur les versions ultérieures de Windows. Ces noms d'unités restent cependant réservés, il est impossible de créer un fichier qui porterait l'un de ces noms.
Cet encadré ne devrait intéresser que ceux qui utilisent le DOS ou une version de Windows antérieure à Windows 2000. Ce doit être rare !
PRN : est le nom du " fichier " imprimante. C'est plus exactement le nom de la sortie parallèle initialement prévue pour y connecter une imprimante. Quand il y a plusieurs ports parallèle on les distingue par les noms LPT1, LPT2 etc.
Si vous avez une imprimante qui fonctionne en mode texte connectée au port parallèle, la commande COPY EXEMPLE.TXT PRN aura le même effet que la commande PRINT EXEMPLE.TXT
AUX ou COM1, COM2, COM3 et COM4 sont des noms d'unités réservés aux ports séries.
Si par exemple vous avez un modem externe (avec des LED qui clignotent quand il communique) connecté sur le port COM2, faites une copie d'un fichier vers ce port pour voir la LED qui indique les bits qui passent.
COPY EXEMPLE.TXT COM2
Pour que ce test fonctionne, il faut bien sûr que le modem soit allumé sans quoi vous aurez un message d'erreur du genre : " Erreur d'écriture sur le périphérique COM2" ce qui prouve que ce port est aussi une entrée puisque le programme a vu que le modem est éteint.
Vous serez cependant probablement déçu de ne pas voir clignoter la LED. Avec un petit fichier texte, elle se sera juste allumée pendant une fraction de seconde. Choisissez donc un fichier assez volumineux. Faites aussi la commande MODE COM2 BAUD=150 pour ralentir la transmission et pour pouvoir percevoir les fluctuations de la LED.
Un programme peut être vu comme un système dans lequel entrent des données, elles y sont traitées et il en sort des résultats et/ou éventuellement des signaux d'erreurs.
Les programmes lancés en mode invite de commande :
En général donc, les entrées/sorties des programmes en mode invite de commande concernent la console c'est à dire le clavier et l'écran.
Mais nous avons vu que les PC possèdent d'autres "entrées/sorties". On peut aussi imaginer que le programme sorte ses résultats dans un fichier et même qu'il puise les données à traiter dans un autre fichier encore.
Le but de ce chapitre est d'apprendre comment rediriger les entrées sorties "standards" vers d'autres entrées/sorties et vers ou à partir de fichiers. Cela est possible grâce au mécanisme de redirection, une particularité que Windows et UNIX en mode console.
Cette caractéristique peu connue se révèle parfois bien utile sans être difficile à exploiter. Elle nous permet d'envoyer la sortie console, non pas vers l'écran mais vers un fichier texte, ou même nulle part (NUL), ou de demander au programme de considérer que l'entrée provient non pas du clavier mais d'un fichier.
- Pour réacheminer la sortie standard vers un fichier, il suffit de faire suivre la commande par le signe '>' suivi du nom du fichier de destination. Le symbole '>' doit vous faire penser à une flèche qui indique la sortie choisie.
Exemple : enregistrer le contenu d'un répertoire dans un fichier.
C:\>DIR > Directory.txt
Cela a pour effet de créer un fichier "Directory.txt" qui va recevoir le code sorti par la commande DIR. Ce fichier pourra ensuite être manipulé comme n'importe quel fichier texte, (Edition, recherche, impression etc.)
Si le fichier " Directory.txt " existait déjà, il serait écrasé et remplacé par un nouveau contenu.
Si vous désirez accumuler des données dans un fichier destination sans effacer ce qui y a été enregistré précédemment il suffit d'utiliser deux signes '>' consécutifs
Exemple : C:>Date /t >> log.txt
- La sortie vers stdout peut être annulée en redirigeant ce qui lui est destiné vers la sortie " NUL "
Exemple : copier un fichier sans voir apparaître le message "1 fichier(s) copié(s)"
COPY Source.txt Destination.txt > NUL
Faites bien la différence entre la destination de la copie et la sortie
standard qui devrait recevoir le message "1 fichier(s) copié(s)". La copie
se fait normalement mais le message destiné à la sortie standard est annulé.
Remarquez aussi que s'il y a une erreur, le message d'erreur n'est pas
annulé lui. En effet, sa destination est la sortie des erreurs: "stderr"
Il faut pour annuler ce type de message, demander la redirection de cette
seconde sortie en faisant suivre la commande par 2> NUL
- Il est tout aussi facile de prendre un fichier comme origine des codes à fournir à un programme.
Exemple :
Faire un fichier qui contient des commandes
destinées au programme Debug.
1° Créer un fichier Test qui contient un point d'interrogation ( commande d'aide)
et à la ligne suivante la lettre 'q' pour sortir du programme Debug
?
q
2° Lancer C:>DEBUG < TEST
Ces différentes redirections peuvent être combinées dans une seule commande
Exemples :
Nous avons vu que les caractères '>' et '<' nous servent pour rediriger des entrées/sortie vers ou depuis des fichiers.
On pourrait imager un programme P1 dont le résultat sera envoyé dans un fichier TEMP qui doive servir comme entrée à un programme P2. Les commandes successives seraient :
P1 > TEMP
P2 < TEMP
Les données sorties par le programme P1 servent d'entrées au programme P2.
Il existe un moyen plus simple pour faire passer les données d'un programme à l'autre, c'est le " tube " (" pipe " en anglais) p1 | P2
Exemple : C:>DIR | MORE
Ou encore C:>TYPE ANNUAIRE | SORT | MORE
Les programmes qui traitent les données qui leur parviennent entrée pour les ressortir après les avoir traitées sont appelés des filtres.
Parmi eux, les plus célèbres sont SORT qui fait des tris, MORE qui affiche page par page et FIND pour rechercher une chaîne de caractères dans un fichier texte.
Exercices :