TERMIOS(3) Manuel du programmeur Linux TERMIOS(3)
NOM
termios, tcgetattr, tcsetattr, tcsendbreak, tcdrain,
tcflush, tcflow, cfmakeraw, cfgetospeed, cfgetispeed,
cfsetispeed, cfsetospeed, tcgetpgrp, tcsetpgrp - Consulter
ou indiquer les attributs de terminaux, le contrôle de
ligne, la vitesse de transmission et le GID du processus
en avant-plan sur un terminal.
SYNOPSIS
#include <termios.h>
#include <unistd.h>
int tcgetattr (int fd, struct termios *termios_p);
int tcsetattr (int fd, int optional_actions, struct
termios *termios_p);
int tcsendbreak (int fd, int duree);
int tcdrain (int fd);
int tcflush (int fd, int queue_selector);
int tcflow (int fd, int action);
int cfmakeraw (struct termios *termios_p);
speed_t cfgetospeed (struct termios *termios_p);
int cfsetospeed (struct termios *termios_p, speed_t
speed);
speed_t cfgetispeed (struct termios *termios_p);
int cfsetispeed (struct termios *termios_p, speed_t
speed);
pid_t tcgetpgrp (int fd);
int tcsetpgrp (int fd, pid_t pgrpid);
DESCRIPTION
Les fonctions termios établissent une interface générale
sous forme de terminal, permettant de contrôler les ports
de communication asynchrone.
Plusieurs fonctions décrites ici utilisent un argument
termios_p qui est un pointeur sur une structure termios.
Linux 29 Novembre 1996 1
TERMIOS(3) Manuel du programmeur Linux TERMIOS(3)
Cette structure contient les membres suivants :
tcflag_t c_iflag; /* modes d'entrée */
tcflag_t c_oflag; /* modes de sortie */
tcflag_t c_cflag; /* modes de contrôle */
tcflag_t c_lflag; /* modes locaux */
cc_t c_cc[NCCS]; /* caractères de controle */
Constante pour l'attribut c_iflag :
IGNBRK ignorer les signaux BREAK en entrée.
BRKINT Si IGNBRK est indiqué, considérer un signal BREAK
en entrée comme un caractère \0, sinon déclencher
SIGINT à son arrivée.
IGNPAR Ignorer les erreurs de format et de parité.
PARMRK Si IGNPAR n'est pas indiqué, un caractère ayant une
erreur de parité ou de format est préfixé avec \377
\0. Si ni IGNPAR ni PARMRK ne sont indiqués, un
caractère contenant une erreur de parité ou de for
mat est lu comme \0.
INPCK Valider la vérification de parité en entrée.
ISTRIP Eliminer le huitième bit.
INLCR Convertir NL en CR en entrée.
IGNCR Ignorer CR en entrée.
ICRNL Convertir CR en NL en entrée, sauf si IGNCR est
indiqué.
IUCLC Transformer les majuscules en minuscules en entrée.
IXON Valider le contrôle de flux XON/XOFF en sortie.
IXANY Valider le redémarrage du flux de sortie par
n'importe quel caractère.
IXOFF Valider le contrôle de flux XON/XOFF en entrée.
IMAXBEL
Faire sonner le terminal quand le buffer d'entrée
est plein.
Constantes pour l'attribut c_oflag :
OPOST enable implementation-defined output processing
OLCUC Convertir les minuscules en majuscules en sortie.
Linux 29 Novembre 1996 2
TERMIOS(3) Manuel du programmeur Linux TERMIOS(3)
ONLCR Convertir NL en CR-NL en sortie.
OCRNL Convertir CR en NL en sortie.
ONOCR Ne pas émettre de CR en colonne 0
ONLRET Ne pas émettre de CR
OFILL Utiliser des caractères de remplissage pour les
délais, plutôt qu'un délai temporisé.
OFDEL Le caractère de remplissage est ASCII DEL. Sinon
c'est ASCII NUL
NLDLY Délai du saut de ligne. Les valeurs sont NL0 et
NL1.
CRDLY Délai du retour chariot. Les valeurs sont CR0, CR1,
CR2, ou CR3.
TABDLY Délai de tabulation horizontale. Les valeurs sont
TAB0, TAB1, TAB2, TAB3, ou XTABS. Une valeur XTABS
convertit les tabulations en espaces (positions
toutes les huit colonnes).
BSDLY Délai du retour en arrière (baskspace). Les valeurs
sont BS0 ou BS1.
VTDLY Délai de tabulation verticale. Les valeurs sont VT0
ou VT1.
FFDLY Délai de saut de page. Les valeurs sont FF0 ou FF1.
Constantes pour l'attribut c_cflag :
CSIZE Longueur des caractères. Les valeurs sont CS5, CS6,
CS7, ou CS8.
CSTOPB Utiliser deux bits de stop plutôt qu'un.
CREAD Valider la réception.
PARENB Valider le codage de parité en sortie, et la
vérification de parité en entrée.
PARODD Parité impaire en entrée et sortie.
HUPCL Abaisser les signaux de contrôle du modem lorsque
le dernier processus referme le périphérique (rac
crochement).
CLOCAL Ignorer les signaux de contrôle du modem.
CIBAUD Vitesse d'entrée (inutilisée).
Linux 29 Novembre 1996 3
TERMIOS(3) Manuel du programmeur Linux TERMIOS(3)
CRTSCTS
Contrôle de flux RTS/CTS.
Constantes pour l'attribut c_lflag :
ISIG Lorsqu'un signal INTR, QUIT, SUSP, ou DSUSP
arrivent, engendrer le signal correspondant.
ICANON Mode canonique. Ceci permet l'utilisation des car
actères spéciaux EOF, EOL, EOL2, ERASE, KILL,
REPRINT, STATUS, et WERASE, et configure les
buffers par ligne.
XCASE Si ICANON est indiqué également, le terminal est en
mode majuscule uniquement. Les entrées sont con
verties en minuscules, sauf pour les caractères
précédes par \. En sortie, les caractères majus
cules sont précédes par \ et les minuscules sont
converties en majuscules.
ECHO Effectuer un écho des caractères saisis.
ECHOE Si ICANON est également activé, la touche ERASE
efface le caractère précédent, et WERASE efface le
mot précédent.
ECHOK Si ICANON est également activé, la touche KILL
efface la ligne en cours.
ECHONL Si ICANON est également activé, la touche NL dis
pose d'un écho local, même si ECHO n'est pas
activé.
ECHOCTL
Si ECHO est également activé, les signaux de
contrôle ASCII autres que TAB, NL, START, et STOP
sont représentés en écho local par ^X, ou X est le
caractère dont le code ASCII est supérieur de 0x40
à celui du signal de contrôle. par exemple 0x08
(BS) est représenté par ^H.
ECHOPRT
Si ICANON et IECHO sont aussi activés, les car
actères sont imprimés avant leur effacement. (?)
ECHOKE Si ICANON est également activé, la touche KILL
efface chaque caractère de la ligne, comme indiqué
par ECHOE et ECHOPRT.
FLUSHO Le buffer de sortie est vidé. Cet attribut est
déclenché en tappant le caractère DISCARD.
NOFLSH Désactive le vidage des files d'entrée et de sortie
pendant les signaux SIGINT et SIGQUIT, ainsi que le
Linux 29 Novembre 1996 4
TERMIOS(3) Manuel du programmeur Linux TERMIOS(3)
vidage de la file d'entrée durant les signaux SIG
SUSP.
TOSTOP Envoie le signal SIGTTOU au groupe d'un processus
en arrière-plan essayant d'écrire sur son terminal
de contrôle.
PENDIN Tous les caractères de la file d'entrée sont
réimprimés quand le caractère suivant est lu. (bash
utilise ceci pour la complétion de commande.)
IEXTEN enable implementation-defined input processing.
tcgetattr() obtient les paramètres associés à l'objet
référencé par fd et les stocke dans la structure termios
pointée par termios_p. Cette fonction peut être appelée
par un processus en arrière-plan, néanmoins les attributs
de terminal peuvent être modifiés par la suite par le pro
cessus en avant-plan.
tcsetattr() fixe les paramètres du terminal (à moins que
le matériel sous-jacent ne le supporte par) en lisant la
structure termios pointée par termios_p. optional_actions
précise QUAND les changements auront lieu :
TCSANOW
Les modifications sont effectuées immédiatement.
TCSADRAIN
Les modifications sont effectuées lorsque toutes
les opérations d'écriture sur fd auront été trans
mises. Cette fonction devrait être utilisée pour
toute modification de paramètre affectant les sor
ties.
TCSAFLUSH
Les modifications sont effectuées lorsque toutes
les opérations d'écriture sur fd auront été trans
mises. Les entrées qui n'ont pas été traitées
seront éliminées avant de faire les modifications.
tcsendbreak() transmet un flux continu de bits à zéro pen
dant une durée donnée si le terminal utilise une transmis
sion série asynchrone. Si durée vaut zéro, les bits à
zéro sont émis pendant au moins 0.25 seconde, et pas plus
de 0.5 seconde. Si durée est non nul, l'émission se fera
pendant durée*N secondes, avec N valant au moins 0.25, et
pas plus de 0.5.
Si le terminal n'est pas connecté avec une liaison série
asynchrone, tcsendbreak() n'effecte aucune action.
tcdrain() attend que toutes les écritures sur l'objet
référencé par fd aient été transmises.
Linux 29 Novembre 1996 5
TERMIOS(3) Manuel du programmeur Linux TERMIOS(3)
tcflush() élimine toutes les écritures sur l'objet fd pas
encore transmises, ainsi que les données reçues mais pas
encore lues, ceci en fonction de la valeur de queue_selec
tor:
TCIFLUSH
efface les données reçues mais non lues.
TCOFLUSH
efface les données écrites mais non transmises.
TCIOFLUSH
efface a la fois les données reçues non lues, et
les données ecrites non transmises.
tcflow() suspend la transmission ou la réception des
données sur l'objet référencé par fd, en fonction de la
valeur de action:
TCOOFF suspend les transmissions
TCOON redémarre les transmissions suspendues
TCIOFF envoie un caractère STOP, ce qui demande au termi
nal de suspendre toute transmission de données vers
le système.
TCION envoie un caractère START, ce qui redémarre la
transmission des données depuis le terminal vers le
système.
Lors de l'ouverture d'un terminal, ni ses sorties, ni ses
entrées ne sont suspendues.
On peut utiliser les fonctions suivantes pour lire ou
écrire la vitesse de communication du terminal, en util
isant la structure termios. Les modifications ne prennent
effet que lorsque la fonction tcsetattr() a été invoquée
et qu'elle a réussit.
Fixer une vitesse B0 demande au modem de racrocher. La
vitesse réelle de communication correspondant à B38400
peut être modifiée avec setserial(8).
Les vitesses en entrée et en sortie sont stockées dans la
structure termios.
cfmakeraw fixe les attributs du terminal ainsi :
termios_p->c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP
|INLCR|IGNCR|ICRNL|IXON);
termios_p->c_oflag &= ~OPOST;
termios_p->c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN);
termios_p->c_cflag &= ~(CSIZE|PARENB);
termios_p->c_cflag |= CS8;
Linux 29 Novembre 1996 6
TERMIOS(3) Manuel du programmeur Linux TERMIOS(3)
cfgetospeed() renvoie la vitesse de sortie stockée dans la
structure termios pointée par termios_p.
cfsetospeed() fixe la vitesse de sortie stockée dans la
structure termios pointée par termios_p à la valeur
speed, qui doit être l'une des constantes suivantes :
B0
B50
B75
B110
B134
B150
B200
B300
B600
B1200
B1800
B2400
B4800
B9600
B19200
B38400
B57600
B115200
B230400
La vitesse nulle, B0, est utilisée pour terminer une con
nexion. Si B0 est indiquée, il n'y a aucune garantie
d'état des lignes de contrôle du modem. Normalement, ceci
devrait déconnecter la ligne. CBAUDEX est un masque pour
les vitesses supérieures à celles définies dans POSIX.1
(supérieures ou égales à 57600). Ainsi, B57600 & CBAUDEX
est non nulle.
cfgetispeed() renvoie la vitesse d'entrée stockée dans la
structure termios.
cfsetispeed() fixe la vitesse d'entrée stockée dans la
structure termios à la valeur speed. Si la vitesse
d'entrée est mise à 0, elle prendra la même valeur que la
vitesse de sortie.
tcgetpgrp() renvoie l'ID de groupe de processus du groupe
en avant-plan, ou -1 en cas d'erreur.
tcsetpgrp() fixe l'ID de groupe de processus à la valeur
pgrpid. pgrpid doit être l'ID d'un groupe de processus de
la même session.
VALEURS RENVOYÉES
cfgetispeed() renvoie la vitesse d'entrée stockée dans la
structure termios.
cfgetospeed() renvoie la vitesse de sortie stockée dans la
structure termios.
Linux 29 Novembre 1996 7
TERMIOS(3) Manuel du programmeur Linux TERMIOS(3)
tcgetpgrp() renvoie l'ID de groupe de processus du groupe
en avant-plan, ou -1 en cas d'erreur.
Toutes les autres fonctions renvoient
0 si elle réussissent, et
-1 si elles échouent, auquel cas errno contient le
code d'erreur.
VOIR AUSSI
setserial(8)
TRADUCTION
Christophe Blaess, 1997.
Linux 29 Novembre 1996 8