Date création : 27-03-2008 20:23:44
 Vous êtes dans : GNU/Linux Astuces / Pages man [Section3 - Sous-fonctions]
TERMIOS
Index
- NOM
- SYNOPSIS
- DESCRIPTION
- VALEUR RENVOYÉE
- NOTES
- VOIR AUSSI
- TRADUCTION
NOM
termios, tcgetattr, tcsetattr, tcsendbreak, tcdrain, tcflush, tcflow,
cfmakeraw, cfgetospeed, cfgetispeed, cfsetispeed, cfsetospeed, cfsetspeed -
Configuration du terminal
SYNOPSIS
#include <termios.h>
#include <unistd.h>
int tcgetattr(int fd, struct termios *termios_p);
int tcsetattr(int fd, int actions_optionnelles, const struct
termios *termios_p);
int tcsendbreak(int fd, int durée);
int tcdrain(int fd);
int tcflush(int fd, int queue_selector);
int tcflow(int fd, int action);
void cfmakeraw(struct termios *termios_p);
speed_t cfgetispeed(const struct termios *termios_p);
speed_t cfgetospeed(const struct termios *termios_p);
int cfsetispeed(struct termios *termios_p, speed_t vitesse);
int cfsetospeed(struct termios *termios_p, speed_t vitesse);
DESCRIPTION
Les fonctions termios établissent une interface générale pour les terminaux,
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 au moins
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 contrôle */
Les valeurs qui peuvent être mises dans ces membres sont décrites
ci-dessous. Dans le cas des quatre premiers membres, les définitions de
certains des modes associés qui peuvent être utilisés ne sont exposés que si
une macro est définie pour des tests spécifiques (voir
feature_test_macros(7)), comme indiqué entre crochets (« [] »).
Dans les descriptions ci-dessous, « pas dans POSIX » signifie que la
valeur n'est pas spécifiée dans POSIX.1-2001, et « XSI » signifie que la
valeur est spécifiée dans POSIX.1-2001 comme faisant partie de l'extension
XSI.
Constante pour l'attribut c_iflag :
- IGNBRK
-
Ignorer les signaux BREAK en entrée.
- BRKINT
-
Si IGNBRK est indiqué, un caractère BREAK en entrée est ignoré. S'il
n'est pas indiqué, mais si BRKINT est présent, alors un BREAK videra les
files d'attente en entrée et sortie, et si le terminal contrôle un groupe de
processus au premier plan, un signal SIGINT sera envoyé à ce groupe. Si
ni IGNBRK ni BRKINT ne sont indiqués, un caractère BREAK sera lu comme
un caractère nul (« ? »), sauf si PARMRK est présent, auquel cas il
sera lu comme une séquence 377 ? ?.
- 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 ?. Si ni IGNPAR ni PARMRK ne sont
indiqués, un caractère contenant une erreur de parité ou de format est lu
comme ?.
- INPCK
-
Valider la vérification de parité en entrée.
- ISTRIP
-
Éliminer 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
-
(Pas dans POSIX) Transformer les majuscules en minuscules en entrée.
- IXON
-
Valider le contrôle de flux XON/XOFF en sortie.
- IXANY
-
(XSI) La sortie bloquée sera redémarrée en tapant n'importe quel
caractère. Le défaut est de ne redémarrer la sortie qu'avec le caractère
START.
- IXOFF
-
Valider le contrôle de flux XON/XOFF en entrée.
- IMAXBEL
-
(Pas dans POSIX) Faire sonner le terminal quand le tampon d'entrée est
plein. Linux n'implémente pas ce bit, et considère qu'il est toujours actif.
Constantes POSIX.1 pour l'attribut c_oflag :
- OPOST
-
Traitement en sortie dépendant de l'implémentation.
Les autres constantes pour c_oflag sont définies dans POSIX.1-2001 sauf
indication contraire.
- OLCUC
-
(Pas dans POSIX) Convertir les minuscules en majuscules en sortie.
- ONLCR
-
(XSI) 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 le délai, plutôt qu'une
temporisation.
- OFDEL
-
(Pas dans POSIX) Le caractère de remplissage est ASCII DEL (0177). Sinon
c'est ASCII NUL (« ? »). (Non implémenté dans Linux)
- NLDLY
-
Masque du délai de saut de ligne. Les valeurs sont NL0 et
NL1. [Nécessite _BSD_SOURCE ou _SVID_SOURCE ou _XOPEN_SOURCE]
- CRDLY
-
Masque du délai de retour chariot. Les valeurs sont CR0, CR1, CR2
ou CR3. [Nécessite _BSD_SOURCE ou _SVID_SOURCE ou _XOPEN_SOURCE]
- TABDLY
-
Masque du délai de tabulation horizontale. Les valeurs sont TAB0,
TAB1, TAB2, TAB3 (ou XTABS). Une valeur TAB3 , c'est-à-dire
XTABS, convertit les tabulations en espaces (positions toutes les huit
colonnes). [Nécessite _BSD_SOURCE ou _SVID_SOURCE ou _XOPEN_SOURCE]
- BSDLY
-
Masque du délai de retour en arrière (backspace). Les valeurs sont BS0 ou
BS1 (n'a jamais été implémenté). [Nécessite _BSD_SOURCE ou _SVID_SOURCE
ou _XOPEN_SOURCE]
- VTDLY
-
Masque du délai de tabulation verticale. Les valeurs sont VT0 ou VT1.
- FFDLY
-
Masque du délai de saut de page. Les valeurs sont FF0 ou
FF1. [Nécessite _BSD_SOURCE ou _SVID_SOURCE ou _XOPEN_SOURCE]
Constantes pour l'attribut c_cflag :
- CBAUD
-
(Pas dans POSIX) Masque des vitesses (4+1 bits). [Nécessite _BSD_SOURCE ou
_SVID_SOURCE]
- CBAUDEX
-
(Pas dans POSIX) Masque étendu des vitesses (1 bit) inclus dans
CBAUD. [Nécessite _BSD_SOURCE ou _SVID_SOURCE]
POSIX dit que la vitesse est stockée dans une structure termios sans dire
précisément où, et fournit cfgetispeed() et cfsetispeed() pour la lire
ou l'écrire. Certains systèmes utilisent les bits de CBAUD dans c_cflag,
d'autres systèmes utilisent des champs distincts, par exemple sg_ispeed
et sg_ospeed.
- CSIZE
-
Masque de 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.
- LOBLK
-
(Pas POSIX) Bloquer la sortie depuis un niveau de shell non
concurrent. Utilisé par shl (shell layers). (Non implémenté dans Linux)
- CIBAUD
-
(Pas dans POSIX) Masque des vitesses d'entrée. Les bits pour CIBAUD sont les
mêmes que ceux de CBAUD, décalés à gauche de IBSHIFT bits. [Nécessite
_BSD_SOURCE ou _SVID_SOURCE] (Non implémenté dans Linux)
- CRTSCTS
-
(Pas dans POSIX) Contrôle de flux RTS/CTS. [Nécessite _BSD_SOURCE ou
_SVID_SOURCE]
Constantes pour l'attribut c_lflag :
- ISIG
-
Lorsqu'un caractère INTR, QUIT, SUSP ou DSUSP arrive, engendrer le signal
correspondant.
- ICANON
-
Mode canonique. Ceci permet l'utilisation des caractères spéciaux EOF, EOL,
EOL2, ERASE, KILL, LNEXT, REPRINT, STATUS et WERASE, et configure les
tampons par ligne.
- XCASE
-
(Pas dans POSIX, non supporté sous Linux) 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édés par . En
sortie, les caractères majuscules sont précédés 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
-
(Pas dans POSIX) 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. [Nécessite _BSD_SOURCE ou _SVID_SOURCE]
- ECHOPRT
-
(Pas dans POSIX) Si ICANON et IECHO sont aussi activés, les caractères
sont imprimés lorsqu'ils sont effacés. [Nécessite _BSD_SOURCE ou
_SVID_SOURCE]
- ECHOKE
-
(Pas dans POSIX) Si ICANON est également activé, la touche KILL efface
chaque caractère de la ligne, comme indiqué par ECHOE et
ECHOPRT. [Nécessite _BSD_SOURCE ou _SVID_SOURCE]
- DEFECHO
-
(Pas dans POSIX) N'effectuer l'écho que lorsque le caractère est lu. (Non
implémenté dans Linux)
- FLUSHO
-
(Pas dans POSIX, non supporté sous Linux) Le tampon de sortie est vidé. Cet
attribut est déclenché en tapant le caractère DISCARD. [Nécessite
_BSD_SOURCE ou _SVID_SOURCE]
- NOFLSH
-
Désactiver le vidage des files d'entrée et de sortie pendant les signaux
SIGINT, SIGQUIT et SIGSUSP.
- TOSTOP
-
Envoyer le signal SIGTTOU au groupe d'un processus en arrière-plan essayant
d'écrire sur son terminal de contrôle.
- PENDIN
-
(Pas dans POSIX, non supporté sous Linux) 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 le complétement de commande) [Nécessite _BSD_SOURCE ou
_SVID_SOURCE]
- IEXTEN
-
Traitement de l'entrée dépendant de l'implémentation. Cet attribut, tout
comme ICANON, doit être actif pour que les caractères spéciaux EOL2,
LNEXT, REPRINT et WERASE soient interprétés, et pour que l'attribut IUCLC
prenne effet.
Le tableau c_cc définit des caractères de contrôle spéciaux. Les symboles
(valeurs initiales) et significations sont :
- VINTR
-
(003, ETX, Ctrl-C, ou encore 0177, DEL, rubout) Caractère
d'interruption. Envoie le signal SIGINT. Reconnu quand ISIG est présent, et
n'est pas transmis en entrée.
- VQUIT
-
(034, FS, Ctrl-) Caractère Quit. Envoie le signal SIGQUIT. Reconnu quand
ISIG est présent, et n'est pas transmis en entrée.
- VERASE
-
(0177, DEL, rubout, ou 010, BS, Ctrl-H ou encore #) Caractère
d'effacement. Ceci efface le caractère précédent pas encore effacé, mais ne
revient pas en-deça d'EOF ou du début de ligne. Reconnu quand ICANON est
actif, et n'est pas transmis en entrée.
- VKILL
-
(025, NAK, Ctrl-U ou Ctrl-X, ou encore @) Caractère Kill. Il efface tous les
caractères en entrée, jusqu'au dernier EOF ou début de ligne. Reconnu quand
ICANON est actif, et pas transmis en entrée.
- VEOF
-
(004, EOT, Ctrl-D) Caractère de fin de fichier. Plus précisément : ce
caractère oblige l'envoi du contenu du tampon vers le programme lecteur sans
attendre la fin de ligne. S'il s'agit du premier caractère de la ligne, le
read() renvoie zéro dans le programme appelant, ce qui correspond à une
fin de fichier. Reconnu quand ICANON est actif, et pas transmis en entrée.
- VMIN
-
Nombre minimal de caractères lors d'une lecture en mode non canonique.
- VEOL
-
(0, NUL) Caractère fin de ligne supplémentaire. Reconnu quand ICANON est
actif.
- VTIME
-
Délai en dixièmes de secondes pour une lecture en mode non canonique.
- VEOL2
-
(Pas dans POSIX ; 0, NUL) Encore un autre caractère fin de ligne. Reconnu
quand ICANON est actif.
- VSWTCH
-
(Pas dans POSIX et non supporté sous Linux ; 0, NUL) Caractère de
basculement (utilisé uniquement par shl).
- VSTART
-
(021, DC1, Ctrl-Q) Caractère de démarrage. Relance la sortie interrompue par
un caractère d'arrêt. Reconnu quand IXON est actif, et pas transmis en
entrée.
- VSTOP
-
(023, DC3, Ctrl-S) Caractère d'arrêt. Interrompt la sortie jusqu'à la
pression d'un caractère de démarrage. Reconnu quand IXON est actif, et pas
transmis en entrée.
- VSUSP
-
(032, SUB, Ctrl-Z) Caractère de suspension. Envoie le signal
SIGTSTP. Reconnu quand ISIG est actif, et pas transmis en entrée.
- VDSUSP
-
(Pas dans POSIX et non supporté sous Linux ; 031, EM, Ctrl-Y) Caractère de
suspension retardée. Envoie le signal SIGTSTP quand le caractère est lu par
le programme utilisateur. Reconnu quand IEXTEN et ISIG sont actifs, et quand
le système supporte le contrôle des processus, et non transmis en entrée.
- VLNEXT
-
(Pas dans POSIX ; 026, SYN, Ctrl-V) Protège le caractère suivant en lui
supprimant toute signification spéciale. Reconnu quand IEXTEN est actif, et
pas transmis en entrée.
- VWERASE
-
(Pas dans POSIX ; 027, ETB, Ctrl-W) Effacement de mot. Reconnu quand ICANON
et IEXTEN sont actifs, et pas transmis en entrée.
- VREPRINT
-
(Pas dans POSIX ; 022, DC2, Ctrl-R) Réafficher les caractères pas encore
lus. Reconnu quand ICANON et IEXTEN sont actifs, et pas transmis en entrée.
- VDISCARD
-
(Pas dans POSIX, non supporté sous Linux ; 017, SI, Ctrl-O) Bascule
start/stop pour ignorer les caractères en attente de sortie. Reconnu quand
IEXTEN est actif, et pas transmis en entrée.
- VSTATUS
-
(Pas dans POSIX, non supporté sous Linux ; 024, DC4, Ctrl-T).
Ces valeurs sont toutes différentes, sauf VTIME, VMIN qui peuvent avoir la
même valeur que VEOL et VEOF respectivement. En mode non canonique, la
signification d'un caractère spécial est remplacée par sa valeur de
temporisation. MIN (indexée avec VMIN) représente le nombre minimal de
caractères à recevoir pour satisfaire une lecture. TIME (indexée avec VTIME)
est une valeur en dixièmes de seconde. Quand ils sont tous deux remplis, une
lecture attendra au moins un caractère, et reviendra dès que MIN caractères
auront été reçus, ou si le temps TIME est écoulé depuis la réception du
dernier caractère. Si seul MIN est rempli, la lecture ne reviendra pas avant
d'avoir reçu MIN caractères. Si seul TIME est rempli, la lecture reviendra
dès qu'un caractère arrivera, ou dès que le délai sera écoulé. Si aucun
n'est rempli, la lecture reviendra immédiatement, ne lisant que les
caractères immédiatement disponibles.
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 au
premier plan.
tcsetattr() fixe les paramètres du terminal (à moins que le matériel
sous-jacent ne le supporte pas) en lisant la structure termios pointée
par termios_p. actions_optionnelles 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 nulle, l'émission se fera
pendant un temps dépendant de l'implémentation.
Si le terminal n'est pas connecté avec une liaison série asynchrone,
tcsendbreak() n'effectue 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 à la fois les données reçues non lues, et les données écrites 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éussi.
Fixer une vitesse B0 demande au modem de raccrocher. 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 vitesse, 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 vitesse, qui doit être spécifiée à l'aide d'une
des constantes Bnnn listées ci-dessus pour cfsetospeed(). Si la
vitesse d'entrée est mise à 0, elle prendra la même valeur que la vitesse de
sortie.
cfsetspeed() est une extension BSD 4.4. Elle prend les mêmes arguments
que cfsetispeed(), et fixe à la fois les vitesses d'entrée et de sortie.
VALEUR RENVOYÉE
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.
Toutes les autres fonctions renvoient
- 0
-
si elle réussissent, et
- -1
-
si elles échouent, auquel cas errno contient le code d'erreur.
Notez que tcsetattr() indique une réussite si une des modifications
peut être réalisée. Toutefois, pour effectuer plusieurs changements, il peut
être nécessaire de faire suivre cet appel d'une invocation de tcgetattr()
pour vérifier que les modifications ont bien été réalisées.
NOTES
Unix V7 et plusieurs systèmes ultérieurs avaient une liste de vitesse de
transmission où l'on rencontrait, après les quatorze valeurs B0...B9600, les
constantes EXTA, EXTB (« External A » et « External B »). De nombreux
systèmes étendent cette liste avec des vitesses bien plus rapides.
L'effet d'une durée non nulle avec tcsendbreak() est variable. SunOS
indique un break pendant durée*N secondes, où N est au moins
0,25, et au plus 0,5. Linux, AIX, DU, Tru64 envoie un break pendant durée
millisecondes. FreeBSD, NetBSD, HP-UX et MacOS ignorent la valeur
durée. Sous Solaris et Unixware, tcsendbreak() avec une durée non
nulle se comporte comme tcdrain().
VOIR AUSSI
stty(1), feature_test_macros(7), setserial(8)
TRADUCTION
Cette page de manuel a été traduite et mise à jour par
Christophe Blaess <http://www.blaess.fr/christophe/> entre 1996 et 2003,
puis par Alain Portal <aportal AT univ-montp2 DOT fr> jusqu'en 2006.
La traduction de cette page de manuel est basée sur les traductions
disponibles sur http://manpagesfr.free.fr/,
mais est gérée par l'équipe francophone de traduction de Debian
au travers de la liste de discussion debian-l10n-french.
Veuillez signaler toute erreur de traduction par un rapport de bogue sur
le paquet manpages-fr.
Vous pouvez toujours avoir accès à la version anglaise de ce document en
utilisant la commande
« man -L C <section> <page_de_man> ».
|