
MAJ BROSSARD
petitedoc.txt
- Committer:
- singularity
- Date:
- 2014-10-22
- Revision:
- 3:8f2c0c324296
- Parent:
- 2:2889a7a4b67a
File content as of revision 3:8f2c0c324296:
#define NCCS 16 typedef unsigned int tcflag_t; typedef unsigned char cc_t; struct termios { tcflag_t c_iflag; /* Input modes */ tcflag_t c_oflag; /* Output modes */ tcflag_t c_cflag; /* Control modes */ tcflag_t c_lflag; /* Local modes */ tcflag_t c_reserved; /* Reserved for future use */ cc_t c_cc[NCCS]; /* Control characters */ }; Modes d'entrée Macro-définitions des drapeaux du mode d'entrée : IGNBRK Ignorer <break> BRKINT Signal SIGINT à la frappe de <break> IGNPAR Ignorer les erreurs de parité PARMRK Marquer les erreurs de parité INPCK Vérification de parité ISTRIP Strip character: compacter sur 7 bits INLCR Transformer NL en CR IGNCR Ignorer CR ICRNL Transformer CR en NL _IUCLC Transformer Majuscules en minuscules IXON Autoriser l'arrêt du flux avec (Ctrl-S/Ctrl-Q) _IXANY N'importe quel caractère relance le flux. IXOFF Interdit l'arrêt du flux. Modes de sortie Macro-définitions des drapeaux du mode de sortie : OPOST Postprocessing de la sortie. OLCUC Transformer minuscule en MAJUSCULE en sortie. ONLCR NL en CR+NL. OCRNL CR en NL . ONOCR No CR en colonne 0. ONLRET NL en NL+CR Modes de contrôle Description plus bas niveau de la ligne de communication. Utilisés surtout pour des périphériques de communication (modems). CLOCAL Ouverture non bloquante, sinon l'ouverture est bloquante tant que la ligne n'est pas prête (par exemple un modem), sauf demande contraire dans le open avec O_NONBLOCK. HUPCL hangup sur le dernier close. Modes locaux Ce sont ces modes-là qui ont le plus d'impact au niveau logiciel. Ce sont eux qui indiquent les traitements réalisés sur les caractères de contrôle et déterminent le comportement de la primitive read. ISIG les caractères de contrôle intr, quit, etc sont transformés en signaux. ECHO Les caractères frappés au clavier sont après transformation, définie dans le mode d'entrée, insérés dans le flux de sortie (écho des caractères en sh par exemple). ECHOE dans ce mode et en mode ICANON, le caractère de contrôle erase a un écho provoquant l'effacement du dernier caractère sur l'écran. ECHOK dans ce mode et en mode ICANON, le caractère de contrôle kill a comme écho le caractère de fin de ligne. NOFLSH dans ce mode, il n'y a pas de vidange par défaut des tampons de lecture et d'écriture à la prise en compte des caractères intr, quit, susp en mode ISIG. TOSTOP dans ce mode, les processus du groupe de processus en arrière-plan du terminal sont suspendus, lorsqu'ils essaient d'écrire sur le terminal, par le signal SIGTTOU. ICANON est un mode complexe, voir plus bas. 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. A chaque caractère reçu le minuteur est repositionné. Si le nombre de caractères reçu avant l'expiration du minuteur est égal à MIN l'appel read retourne ces caractère au processus. Si le minuteur expire avant la reception de MIN caractères, l'appel read retourne les caractères reçus au processus. Remarquer qu'au moins un caractère sera renvoyé. Le read est bloquant tant que le premier caractère n'est pas reçu et que MIN et TIME ne sont pas mis en marche. 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é. int tcgetattr(int desc, struct termios *termios); extraction des paramètres courants. int tcsetattr(int desc, int option, struct termios *termios); positionnement des paramètres. Le paramétre option permet de spécifier le comportement de gestion des tampons d'entrée et de sortie de la ligne : TCSANOW changement immédiat des attributs TCSADRAIN les sorties en cours sont réalisées avant TCSAFLUSH idem et le tampon de lecture est vidé. La primitive int tcdrain(int desc); bloque le processus jusqu'à ce que tous les caractères à destination du terminal de descripteur desc aient été transmis. int tcflush(int desc, int option); vidange des tampons. valeur de option: TCIFLUSH tampon d'entrée TCOFLUSH tampon de sortie TCIOFLUSH les deux tampons. Encodage: speed_t cfgetispeed(const struct termios *termios); speed_t cfgetospeed(const struct termios *termios); Permet de lire la vitesse dans la structure termios. int cfsetispeed(const struct *termios, speed_t vitesse); int cfsetospeed(const struct *termios, speed_t vitesse); permet de positionner la vitesse dans la structure termios. Positionnement/récupération de la structure termios par les primitives tcgetattr et tcsetattr