termios
Table des matières
Retour à l'index
NOM
termios, tcgetattr, tcsetattr, tcsendbreak, tcdrain, tcflush, tcflow,
cfmakeraw, cfgetospeed, cfgetispeed, cfsetispeed, cfsetospeed, cfsetspeed
— Configuration du terminal
BIBLIOTHÈQUE
Bibliothèque C standard (libc, -lc)
SYNOPSIS
#include <termios.h>
#include <unistd.h>
int tcgetattr(int fd, struct termios *termios_p);
int tcsetattr(int fd, int optional_actions,
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);
int cfsetspeed(struct termios *termios_p, speed_t vitesse);
Exigences de macros de test de fonctionnalités pour la glibc (consulter
feature_test_macros(7)) :
cfsetspeed(), cfmakeraw() :
Depuis la glibc 2.19 :
_DEFAULT_SOURCE
glibc 2.19 et antérieures :
_BSD_SOURCE
DESCRIPTION
Les fonctions termios établissent une interface générale pour les terminaux,
permettant de contrôler les ports de communication asynchrone.
La structure termios
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 spéciaux */
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 (consultez
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.
Constantes pour l'attribut c_iflag :
- IGNBRK
-
Ignorer les signaux BREAK en entrée.
- BRKINT
-
Si IGNBRK est indiqué, un signal 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 NULL (« \0 »), 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 ce bit est défini, les octets d'entrée avec des erreurs de format et de
parité sont marqués lors de leur passage au programme. Ce bit est signifiant
seulement quand INPCK est défini et que IGNPAR ne l'est pas. Deux
octets précédents \377 et \0 marquent les octets erronées. Donc le
programme lit en fait trois octets pour un octet erroné reçu du terminal. Si
un octet valable a la valeur \377 et si ISTRIP (voir ci-dessous)
n'est pas défini, le programme pourrait le confondre avec le préfixe qui
marque une erreur de parité. Aussi, un octet \377 valable est passé au
programme sous la forme de deux octets \377 \377 dans ce cas.
-
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
-
É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 capitales 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.
- IUTF8 (depuis Linux 2.6.4)
-
(Pas dans POSIX) L'entrée est en UTF-8 ; cela permet au caractère
d'effacement de fonctionner correctement dans le mode « cooked »
(prétraitement).
Constantes pour l'attribut c_oflag :
- OPOST
-
Traitement en sortie dépendant de l'implémentation.
- OLCUC
-
(Pas dans POSIX) Convertir les minuscules en capitales 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
-
Le caractère NL est présumé remplir la fonction de retour charriot ; l'idée
du noyau de la présente colonne est définie à 0 après à la fois NL et CR.
- OFILL
-
Utiliser des caractères de remplissage pour le délai, plutôt qu'une
temporisation.
- OFDEL
-
Le caractère de remplissage est ASCII DEL (0177). Sinon c'est ASCII NUL (« \0 »). (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, mais voir la section BOGUES). 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
-
Si le bit PARODD est positionné, la parité en entrée et sortie sera
impaire ; sinon une parité paire est utilisée.
- HUPCL
-
Abaisser les signaux de contrôle du modem lorsque le dernier processus
referme le périphérique (raccrochage).
- 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 la
glibc, pris en charge dans Linux au moyen des ioctls TCGET* et
TCSET* ; voir ioctl_tty(2))
- CMSPAR
-
(Pas dans POSIX) Parité fixe (marque/espace – géré par certains
périphériques série) ; si PARODD est positionné, le bit de parité est
toujours à 1 ; si PARODD n'est pas positionné, le bit de parité est
toujours à 0. [Nécessite _BSD_SOURCE ou _SVID_SOURCE]
- 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
-
Active le mode canonique (décrit ci-dessous).
- XCASE
-
(Pas dans POSIX, non géré 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. (Nécessite _BSD_SOURCE, _SVID_SOURCE ou
_XOPEN_SOURCE.)
- ECHO
-
Afficher les 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é, afficher le caractère NL même si ECHO
n'est pas activé.
- ECHOCTL
-
(Pas dans POSIX) Si ECHO est également activé, les caractères spéciaux du
terminal autres que TAB, NL, START, et STOP sont représentés par haX,
où X est le caractère dont le code ASCII est supérieur de 0x40 à celui du
caractère spécial. Par exemple, 0x08 (BS) est représenté par
haH. [Nécessite _BSD_SOURCE ou _SVID_SOURCE]
- ECHOPRT
-
(Pas dans POSIX) Si ICANON et ECHO 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'affichage que lorsque le caractère est
lu. (Non implémenté dans Linux)
- FLUSHO
-
(Pas dans POSIX, non géré 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 la création des
signaux pour les caractères INT, QUIT et SUSP.
- TOSTOP
-
Envoyer le signal SIGTTOU au groupe de processus d'un processus en
arrière-plan essayant d'écrire sur son terminal de contrôle.
- PENDIN
-
(Pas dans POSIX, non géré sous Linux) Tous les caractères de la file
d'entrée sont réimprimés quand le caractère suivant est lu. (bash(1)
utilise cela pour la complétion 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 spéciaux. Les symboles (valeurs
initiales) et significations sont :
- VDISCARD
-
(Pas dans POSIX, non géré 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.
- VDSUSP
-
(Pas dans POSIX et non géré sous Linux ; 031, EM, Ctrl-Y) Caractère de
suspension retardée (DSUSP). 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 gèree le contrôle des processus, et non transmis
en entrée.
- VEOF
-
(004, EOT, Ctrl-D) Caractère de fin de fichier (EOF). 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,
l'appel à read(2) 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.
- VEOL
-
(0, NUL) Caractère fin de ligne supplémentaire (EOL). Reconnu quand
ICANON est actif.
- VEOL2
-
(Pas dans POSIX ; 0, NUL) Encore un autre caractère fin de ligne
(EOL2). Reconnu quand ICANON est actif.
- VERASE
-
(0177, DEL, rubout, ou 010, BS, Ctrl-H ou encore #) Caractère d'effacement
(ERASE). Cela 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.
- VINTR
-
(003, ETX, Ctrl-C, ou encore 0177, DEL, rubout) Caractère d'interruption
(INTR). Envoie le signal SIGINT. Reconnu quand ISIG est présent, et
n'est pas transmis en entrée.
- VKILL
-
(025, NAK, Ctrl-U ou Ctrl-X, ou encore @) Caractère Kill (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.
- VLNEXT
-
(Pas dans POSIX ; 026, SYN, Ctrl-V) Suivant littéral (LNEXT). Protège le
caractère suivant en lui supprimant toute signification spéciale. Reconnu
quand IEXTEN est actif, et pas transmis en entrée.
- VMIN
-
Nombre minimal de caractères lors d'une lecture en mode non canonique (MIN).
- VQUIT
-
(034, FS, Ctrl-\) Caractère Quit (QUIT). Envoie le signal
SIGQUIT. Reconnu quand ISIG est présent, et n'est pas transmis en
entrée.
- VREPRINT
-
(Pas dans POSIX ; 022, DC2, Ctrl-R) Réafficher les caractères pas encore
lus (REPRINT). Reconnu quand ICANON et IEXTEN sont actifs, et pas
transmis en entrée.
- VSTART
-
(021, DC1, Ctrl-Q) Caractère de démarrage (START). Relance la sortie
interrompue par un caractère d'arrêt. Reconnu quand IXON est actif, et
pas transmis en entrée.
- VSTATUS
-
(Pas dans POSIX, non géré sous Linux ; 024, DC4, Ctrl-T). Caractère d'état
(STATUS). Affiche sur le terminal des informations sur l'état, incluant
l'état du processus en premier plan et la quantité de temps CPU qu'il a
consommé. Envoie aussi un signal SIGINFO (not géré par Linux) au groupe
du processus de premier plan.
- VSTOP
-
(023, DC3, Ctrl-S) Caractère d'arrêt (STOP). 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 (SUSP). Envoie le signal
SIGTSTP. Reconnu quand ISIG est actif, et pas transmis en entrée.
- VSWTCH
-
(Pas dans POSIX et non géré sous Linux ; 0, NUL) Caractère de basculement
(SWTCH). Utilisé par System V pour basculer les shells dans des calques
(shell layers), notion qui a précédé le contrôle des travaux du shell.
- VTIME
-
Délai en dixièmes de seconde pour une lecture en mode non canonique (TIME).
- VWERASE
-
(Pas dans POSIX ; 027, ETB, Ctrl-W) Effacement de mot (WERASE). Reconnu
quand ICANON et IEXTEN sont actifs, et pas transmis en entrée.
Un caractère spécial de terminal isolé peut être désactivé en positionnant
la valeur de l'élément c_cc correspondant à _POSIX_VDISABLE.
Les valeurs d'indices ci-dessus sont toutes différentes, sauf VTIME et
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. Pour des explications
sur VMIN et VTIME, consultez la description du mode non canonique
ci-dessous.
Récupérer et changer les paramètres du terminal
tcgetattr() récupère 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() définit les paramètres du terminal (à moins que le matériel
sous-jacent ne le gère pas) 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 option 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.
Mode canonique et non canonique
La définition de l'attribut canonique ICANON dans c_lflag détermine si
le terminal est dans le mode canonique (ICANON positionné) ou non
canonique (ICANON non positionné). Par défaut, ICANON est positionné.
Dans le mode canonique :
- -
-
L'entrée est rendue disponible ligne à ligne. Une ligne d'entrée est
disponible quand un délimiteur de ligne (NL, EOL, EOL2 ou EOF au début d'une
ligne). Sauf dans le cas de EOF, le délimiteur de ligne est inclus dans le
tampon renvoyé par read(2).
- -
-
L'édition des lignes est activée (ERASE, KILL ; et si le bit IEXTEN est
positionné : WERASE, REPRINT, LNEXT). Un read(2) renverra au plus une
ligne de l'entrée ; si le read(2) a demandé moins de caractères que
disponibles dans la ligne en cours, seuls les octets demandés seront lus, et
les autres caractères seront disponibles pour les read(2) suivants.
- -
-
La longueur maximale de ligne est 4096 caractères (y compris le caractère
saut de ligne terminal) ; les lignes de plus de 4096 caractères sont
tronquées. Après 4095 caractères, le traitement de l'entrée (par exemple le
traitement de ISIG et ECHO*) se poursuit, mais les données entrées
après 4095 caractères jusqu'à (mais sans l'inclure) un saut de ligne
terminal sont abandonnées. Cela assure que le terminal peut toujours
recevoir plus d'entrées jusqu'à ce que au moins une ligne puisse être lue.
Dans le mode non canonique, l'entrée est disponible tout de suite (sans que
l'utilisateur ait à taper de caractère délimiteur de ligne), aucun
traitement de l'entrée n'est effectué, et l'édition des lignes est
désactivée. Le tampon de lecture acceptera seulement 4095 caractères ; cela
laisse l'espace nécessaire pour un caractère saut de ligne si le mode
d'entrée devient canonique. La valeur des paramètres MIN (c_cc[VMIN]) et
TIME (c_cc[VTIME]) détermine les circonstances dans lesquelles read(2)
se termine ; il y a quatre cas différents :
- MIN == 0, TIME == 0 (lecture de scrutation (polling))
-
Si des données sont disponibles, read(2) renvoie immédiatement le nombre
d'octets disponibles ou le nombre d'octets demandés (le plus petit des
deux). Si aucune donnée n'est disponible, read(2) renvoie 0.
- MIN > 0, TIME == 0 (lecture bloquante)
-
read(2) est bloquant jusqu'à ce que MIN octets soient disponibles, puis
renvoie jusqu’au nombre d’octet demandés.
- MIN == 0, TIME > 0 (lecture avec délai)
-
TIME indique une limite de temps en dixième de seconde. Le décompte du temps
commence lors de l'appel à read(2). read(2) se termine si au moins un
octet est disponible ou si la temporisation expire. Si la temporisation
expire sans qu'il n'y ait eu de données disponibles, read(2) renvoie
0. Si des données sont déjà disponibles au moment de l’appel à read(2),
l’appel se comporte comme si les données étaient reçues immédiatement après
l’appel.
- MIN > 0, TIME > 0 (lecture avec délai entre deux octets)
-
TIME indique une limite de temps en dixième de seconde. Quand un premier
caractère est disponible en entrée, la temporisation est démarrée, puis
remise à zéro à chaque caractère reçu. read(2) se termine quand une des
conditions suivantes est vraie.
-
- -
-
MIN octets ont été reçus.
- -
-
Le délai entre deux octets est dépassé.
- -
-
Le nombre d'octets demandés par read(2) a été reçu (POSIX ne spécifie pas
cette condition de fin et d’autres implémentations de read(2) ne se
terminent pas dans ce cas).
-
Comme la temporisation n'est démarrée que lors de la réception du premier
octet, au moins un octet sera lu. Si des données sont déjà disponibles au
moment de l’appel à read(2), l’appel se comporte comme si les données
étaient reçues immédiatement après l’appel.
POSIX ne spécifie pas si le réglage de l’attribut d’état de fichier
O_NONBLOCK est prioritaire sur les réglages de MIN et TIME. Si
O_NONBLOCK est défini, un read(2) en mode non canonique pourrait
s’arrêter immédiatement, quelque soit le réglage de MIN ou TIME. De plus, si
aucune donnée n’est disponible, POSIX permet un read(2) en mode non
canonique de renvoyer soit 0, soit -1 avec errno défini à EAGAIN.
Mode brut
cfmakeraw() place le terminal dans un mode proche du mode « raw » de
l'ancien pilote de terminal version 7 : l'entrée est disponible caractère
par caractère, il n'y a pas d'écho ni de traitement particulier des
caractères d'entrée ou sortie. Les attributs du terminal sont définis
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;
Contrôle de la ligne
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.
Vitesse de la ligne
Il est possible d'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.
Définir 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.
cfgetospeed() renvoie la vitesse de sortie stockée dans la structure
termios pointée par termios_p.
cfsetospeed() définit 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
B460800
B500000
B576000
B921600
B1000000
B1152000
B1500000
B2000000
Ces constantes sont en plus prises en charge sur les architectures SPARC :
-
- B76800
-
B153600
B307200
B614400
Ces constantes sont en plus prises en charge sur les architectures non
SPARC :
-
- B2500000
-
B3000000
B3500000
B4000000
Du fait des différences entre les architectures, les applications portables
devraient vérifier si une constante particulière Bnnn est définie
avant de l'utiliser.
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, cela 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.
Définir la vitesse à une valeur autre que celles définies par les constantes
Bnnn est possible au moyen de l'ioctl TCSETS2 ; voir
ioctl_tty(2).
cfgetispeed() renvoie la vitesse d'entrée stockée dans la structure
termios.
cfsetispeed() définit 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 à la constante littérale 0 (pas la constante
symbolique B0), elle prendra la même valeur que la vitesse de sortie.
cfsetspeed() est une extension 4.4BSD. Elle prend les mêmes arguments que
cfsetispeed(), et définit à 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 elles réussissent,
- -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.
ATTRIBUTS
Pour une explication des termes utilisés dans cette section, consulter
attributes(7).
| Interface | Attribut | Valeur
|
|
tcgetattr(),
tcsetattr(),
tcdrain(),
tcflush(),
tcflow(),
tcsendbreak(),
cfmakeraw(),
cfgetispeed(),
cfgetospeed(),
cfsetispeed(),
cfsetospeed(),
cfsetspeed()
| Sécurité des threads | MT-Safe
|
STANDARDS
- tcgetattr()
-
tcsetattr()
tcsendbreak()
tcdrain()
tcflush()
tcflow()
cfgetispeed()
cfgetospeed()
cfsetispeed()
cfsetospeed()
POSIX.1-2008.
- cfmakeraw()
-
cfsetspeed()
BSD.
HISTORIQUE
- tcgetattr()
-
tcsetattr()
tcsendbreak()
tcdrain()
tcflush()
tcflow()
cfgetispeed()
cfgetospeed()
cfsetispeed()
cfsetospeed()
POSIX.1-2001.
- cfmakeraw()
-
cfsetspeed()
BSD.
NOTES
UNIX V7 et plusieurs systèmes ultérieurs avaient une liste de vitesse de
transmission où l'on rencontrait, après les valeurs de B0 à B9600, les
deux constantes EXTA et 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 envoient 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().
BOGUES
Sur les architectures Alpha avant Linux 4.16 (et la glibc avant la glibc 2.28), la valeur XTABS était différente de TAB3 et était ignorée par
le code de discipline de ligne N_TTY du pilote du terminal en conséquence
(parce qu'elle ne faisait pas partie du masque TABDLY).
VOIR AUSSI
reset(1), setterm(1), stty(1), tput(1), tset(1), tty(1),
ioctl_console(2), ioctl_tty(2), cc_t(3type), speed_t(3type),
tcflag_t(3type), setserial(8)
TRADUCTION
La traduction française de cette page de manuel a été créée par
Christophe Blaess <https://www.blaess.fr/christophe/>,
Stéphan Rafin <stephan.rafin@laposte.net>,
Thierry Vignaud <tvignaud@mandriva.com>,
François Micaux,
Alain Portal <aportal@univ-montp2.fr>,
Jean-Philippe Guérard <fevrier@tigreraye.org>,
Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>,
Julien Cristau <jcristau@debian.org>,
Thomas Huriaux <thomas.huriaux@gmail.com>,
Nicolas François <nicolas.francois@centraliens.net>,
Florentin Duneau <fduneau@gmail.com>,
Simon Paillard <simon.paillard@resel.enst-bretagne.fr>,
Denis Barbier <barbier@debian.org>,
David Prévot <david@tilapin.org>
et
Jean-Pierre Giraud <jean-pierregiraud@neuf.fr>
Cette traduction est une documentation libre ; veuillez vous reporter à la
GNU General Public License version 3
concernant les conditions de copie et
de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel,
veuillez envoyer un message à
Index
- NOM
-
- BIBLIOTHÈQUE
-
- SYNOPSIS
-
- DESCRIPTION
-
- La structure termios
-
- Récupérer et changer les paramètres du terminal
-
- Mode canonique et non canonique
-
- Mode brut
-
- Contrôle de la ligne
-
- Vitesse de la ligne
-
- VALEUR RENVOYÉE
-
- ATTRIBUTS
-
- STANDARDS
-
- HISTORIQUE
-
- NOTES
-
- BOGUES
-
- VOIR AUSSI
-
- TRADUCTION
-
This document was created by
man2html,
using the manual pages.
Time: 05:06:10 GMT, September 19, 2025