Provided by:
manpages-fr_1.67.0-1_all 
NOM
termios, tcgetattr, tcsetattr, tcsendbreak, tcdrain, tcflush, tcflow,
cfmakeraw, cfgetospeed, cfgetispeed, cfsetispeed, cfsetospeed -
Configuration du 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 cfgetispeed (struct termios * termios_p);
speed_t cfgetospeed (struct termios * termios_p);
int cfsetispeed (struct termios * termios_p, speed_t speed);
int cfsetospeed (struct termios * termios_p, speed_t speed);
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. 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 controle */
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 en avant-plan, un
signal SIGINT sera envoyé à ce groupe. Si ni IGNBRK ni BRKINT ne
sont indiqué, 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 \0 \0.
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 (Pas dans Posix) Transformer les majuscules en minuscules en
entrée.
IXON Valider le contrôle de flux XON/XOFF en sortie.
IXANY (Pas dans Posix ; XSI) Redémarrer le flux de sortie par
n’importe quel caractère.
IXOFF Valider le contrôle de flux XON/XOFF en entrée.
IMAXBEL
(Pas dans Posix) Faire sonner le terminal quand le buffer
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 1003.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.
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 TAB3 , c’est-à -dire 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 (n’a jamais été implémenté).
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 :
CBAUD (Pas dans POSIX) masque binaire des vitesses (4+1 bits).
BAUDEX (Pas dans POSIX) masque binaire étendu des vitesses (1 bit)
inclus dans CBAUD.
(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 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).
CIBAUD (Pas dans Posix) Vitesse d’entrée (inutilisée). Les bits pour
CIBAUD sont les mêmes que ceux de CBAUD, décalés à gauche de
IBSHIFT bits.
CRTSCTS
(Pas dans Posix) 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, LNEXT, REPRINT, STATUS, et
WERASE, et configure les buffers 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é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
(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.
ECHOPRT
(Pas dans Posix) Si ICANON et IECHO sont aussi activés, les
caractères sont imprimés avant leur effacement. (?)
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.
DEFECHO
(Pas dans Posix) N’effectuer l’écho que lorsque le caractère est
lu.
FLUSHO (Pas dans Posix, non supporté sous Linux) 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 (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 la complétion de commande.)
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, WERASE soit
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 encore 010, BS, Ctrl-H), Caractère
d’effacement. Ceci efface le caractère précédent pas encore
effacé, mais ne revient pas en-deça de 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, et aussi @), Caractère Kill. Celui
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 buffer
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 minimum 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), Carctère
de basculement (utilisé uniquement par sh).
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 support le
contrôle des jobs, et non transmis en entrée.
VLNEXT (Pas dans Posix ; 026, SYN, Ctrl-V), Protègle 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)
Interrogation d’état.
Ces valeurs sont toutes différentes, sauf VTIME, VMIN qui peuvent avoir
la même valeur de VEOL et VEOF respectivement. (en mode non-
canonnique, la signification d’un caractère spécial est remplacé par sa
valeur de temporisation. MIN représente le nombre mini de caractères Ã
recevoir pour satisfaire une lecture. TIME est une valeur en dixième de
seconde. Quand ils sont tout dexu 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 TILME 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 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 un temps dépendant de l’implémentation.
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.
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.
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 quatorzes 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 une 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), setserial(8)
TRADUCTION
Christophe Blaess, 1996-2003.