Next: Les caractères spéciaux Up: Modes locaux Previous: Modes locaux

les modes canoniques et non-canoniques

Le choix de l'option ICANON a un effet sur la primitive read en particulier l'accessibilité des caractères frappés dépend de choix effectués sur ce mode.

Mode canonique
: c'est le mode de fonctionnement d'un terminal en mode interactif, il se caractérise de la manière suivante: le tampon d'entrée est structuré en ligne, une ligne étant une suite de caractères terminée par le caractère newline de code ASCII 10 (le newline du C). Ceci signifie que les caractères lus au cours d'une opération de lecture read sur le terminal sont extraits dans une et une seule ligne. Donc tout caractère non suivi d'un newline n'est pas accessible en lecture! Une opération de lecture ne peut avoir lieu à cheval sur plusieurs lignes.
Mode non-canonique
: la structure de ligne ne définit plus le critère d'accessibilité des caractères et les 4 caractères erase, kill, eof, eol perdent leur qualité de caractères de contrôle.

Les critères d'accessibilité en mode non-canonique sont définis par deux caractères spéciaux MIN et TIME du tableau c_cc de la structure termios.

Si MIN > 0 et TIME > 0 , TIME est un minuteur inter-caractères de granularité 0.1 seconde.

Pour certaines valeurs de MIN et TIME:

MIN > 0, TIME = 0
Même comportement mais seul MIN est significatif. Le read est bloquant jusqu'à la reception de MIN caractères.
MIN = 0, TIME > 0
comme le nombre de caractères à lire est nul (MIN = 0), le minuteur est initialisé au debut de l'appel read. L'appel read retourne soit parce qu'un caractère a été lu ou que le délai a expiré.
MIN = 0, TIME = 0
mode non bloquant : l'appel read retourne les caractères disponibles (le minimum des caractères disponibles et du nombre de caractères demandés dans l'appel de read).

Les valeurs les plus couramment utilisées sont MIN=1, TIME=0, ce qui est le mode CBREAK des versions BSD. Ce mode permet d'avoir une saisie bloquante de chaque caractère frappé au clavier (vi utilise ce mode), le read retourne dès qu'un caractère est frappé.

Next: Les caractères spéciaux Up: Modes locaux Previous: Modes locaux

Dominique REVUZ
Mon Feb 2 12:10:31 MET 1998
Une Bug Un mail Merci