| | |
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.
#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);
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. 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 format 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.
- 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 (raccrochement).
- CLOCAL
- Ignorer
les signaux de contrôle du modem.
- CIBAUD
- Vitesse d'entrée (inutilisée).
- 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 caractè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 converties en minuscules, sauf pour
les caractères précédes par \. En sortie, les caractères majuscules 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 dispose 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 caractè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 vidage
de la file d'entrée durant les signaux SIGSUSP.
- 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 processus 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é
transmises. Cette fonction devrait être utilisée pour toute modification
de paramètre affectant les sorties.
- TCSAFLUSH
- Les modifications sont effectuées
lorsque toutes les opérations d'écriture sur fd auront été transmises. 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 pendant une durée
donnée si le terminal utilise une transmission 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.
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_selector:
- 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 terminal 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 utilisant
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;
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 connexion. 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.
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.
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.
setserial(8)
Christophe Blaess,
1997.
Table des matières
© 1996-2000 Adaptation française "Christophe Blaess"
| |