NOM
ioctl_tty - ioctls for terminals and serial lines
SYNOPSIS
#include <termios.h>
int ioctl(int fd, int cmd, ...);
DESCRIPTION
Les appels système ioctl(2) pour les terminaux et les ports série acceptent différents paramètres possibles. La plupart nécessitent un troisième paramètre, d’un type variable, appelé argp ou arg.
Utiliser des ioctl rend les programmes non portables. Utiliser les interfaces POSIX décrites dans termios(3) si possible.
Récupérer et positionner les attributs d’un terminal
TCGETS |
struct termios *argp |
Équivalent à
tcgetattr(fd, argp).
Récupère la configuration du port série
courant.
TCSETS |
const struct termios *argp |
Équivalent à
tcsetattr(fd, TCSANOW, argp).
Configure le port série courant.
TCSETSW |
const struct termios *argp |
Équivalent à
tcsetattr(fd, TCSADRAIN, argp).
Laisse le tampon de sortie se vider, puis configure le port
série courant.
TCSETSF |
const struct termios *argp |
Équivalent à
tcsetattr(fd, TCSAFLUSH, argp).
Laisse le tampon de sortie se vider, abandonne toute
entrée en court, puis configure le port série
courant.
Les quatre ioctl suivants sont équivalents à TCGETS, TCSETS, TCSETSW et TCSETSF, à l’exception qu’ils prennent une structure struct termio * plutôt que struct termios *.
TCGETA |
struct termio *argp | |||
TCSETA |
const struct termio *argp | |||
TCSETAW |
const struct termio *argp | |||
TCSETAF |
const struct termio *argp |
Verrouiller
une structure termios
La structure termios d’un terminal peut
être verrouillée. Le verrou est en
lui-même une structure termios, dont les bits
ou champs non nuls indiquent une valeur
verrouillée.
TIOCGLCKTRMIOS |
struct termios *argp |
Récupère l’état du verrou de la structure termios du terminal.
TIOCSLCKTRMIOS |
const struct termios *argp |
Définit l’état du verrou de la structure termios du terminal. Seul un processus avec la capacité CAP_SYS_ADMIN peut faire cela.
Récupérer
et configurer les tailles de fenêtre
Les tailles de fenêtre sont stockées dans le
noyau, mais ne sont pas utilisée par le noyau (sauf
pour les consoles virtuelles, pour lesquelles le noyau met
à jour les tailles de fenêtre quand la taille
d’une console virtuelle change, par exemple lors du
chargement d’une nouvelle fonte).
Les constantes et structures suivantes sont définies dans <sys/ioctl.h>.
TIOCGWINSZ |
struct winsize *argp |
Récupère la taille de la fenêtre.
TIOCSWINSZ |
const struct winsize *argp |
Définit la taille de la fenêtre.
La structure utilisée par ces ioctl est la suivante :
struct winsize { unsigned short ws_row; unsigned short ws_col; unsigned short ws_xpixel; /* non utilisé */ unsigned short ws_ypixel; /* non utilisé */ };
Lorsque la taille d’une fenêtre change, un signal SIGWINCH est envoyé au groupe de processus au premier plan.
Envoyer une
interruption (« break »)
TCSBRK int arg
Équivalent à
tcsendbreak(fd, arg).
Si le terminal utilise un mode de transmission série
asynchrone et que arg est nul, envoie une
interruption (un flux de bits nuls) pendant 0,25 à
0,5 seconde. Si le terminal n’utilise pas un mode de
transmission série asynchrone, alors soit une
interruption est envoyée, soit la fonction ne fait
rien. Quand arg est non nul, le comportement
n’est pas défini.
(SVr4, UnixWare, Solaris et Linux traitent tcsendbreak(fd,arg) avec un paramètre arg non nul de la même façon que tcdrain(fd). SunOS considère arg comme un coefficient multiplicateur et envoie un flux de bits arg fois plus long que lorsque arg est nul. DG/UX et AIX traite arg (lorsqu’il est non nul) comme un intervalle de temps exprimé en millisecondes. HP-UX ignore arg.)
TCSBRKP int arg
La « version POSIX » de TCSBRK. Elle traite le paramètre non nul arg comme un intervalle de temps mesuré en dixièmes de seconde et ne fait rien lorsque le pilote ne supporte pas les interruptions.
TIOCSBRK void
Active les interruptions, c’est-à-dire commence à envoyer des bits à zéro.
TIOCCBRK void
Désactive les interruptions, c’est-à-dire arrête d’envoyer les bits nuls.
Contrôle
de flux logiciel
TCXONC int arg
Équivalent à
tcflow(fd, arg).
Consultez tcflow(3) pour avoir la signification des
valeurs TCOOFF, TCOON, TCIOFF et
TCION.
Information
sur les tampons et vidage
FIONREAD int *argp
Récupère le nombre d’octets dans le tampon d’entrée.
TIOCINQ int *argp
Identique à FIONREAD.
TIOCOUTQ int *argp
Récupère le nombre d’octets dans le tampon de sortie.
TCFLSH int arg
Équivalent à
tcflush(fd, arg).
Consultez tcflush(3) pour la signification de
TCIFLUSH, TCOFLUSH et TCIOFLUSH.
Simuler
l’entrée
TIOCSTI const char *argp
Insert l’octet donné dans la queue d’entrée.
Rediriger la
sortie de la console
TIOCCONS void
Redirige la sortie qui serait allé vers /dev/console ou /dev/tty0 vers un terminal donné. S’il s’agit d’un pseudoterminal maître, envoie à l’esclave. Dans les versions de Linux antérieures à 2.6.10, n’importe qui peut utiliser cet appel à condition que la sortie ne soit pas déjà redirigée ; depuis la version 2.6.10, seul un processus avec la capacité CAP_SYS_ADMIN peut l’utiliser. Si elle a déjà été redirigée, EBUSY est renvoyé, mais la redirection peut être arrêtée en utilisant cet ioctl avec fd pointant vers /dev/console ou /dev/tty0.
Terminal de
contrôle
TIOCSCTTY int arg
Fait du terminal donné le terminal de contrôle du processus appelant. Le processus appelant doit être un leader de session et ne doit pas déjà avoir de terminal de contrôle. Dans ce cas, arg doit valoir zéro.
Si ce terminal est déjà le terminal de contrôle d’une autre session, alors l’ioctl échoue avec le code d’erreur EPERM, à moins que l’appelant soit un superutilisateur (plus précisément : il a la capacité CAP_SYS_ADMIN) et que arg vaille 1. Dans ce dernier cas, le terminal est « volé », et tous les processus pour lesquels c’était le terminal de contrôle le perde.
TIOCNOTTY void
Si le terminal donné est le terminal de contrôle du processus appelant, abandonne ce terminal de contrôle. Si le processus est un leader de session, alors SIGHUP et SIGCONT seront envoyés au groupe de processus au premier plan, et tous les processus de la session perdent leur terminal de contrôle.
Groupe de
processus et identifiant de session
TIOCGPGRP pid_t *argp
En cas de succès,
équivalent à *argp = tcgetpgrp(fd).
Récupère l’identifiant du groupe de
processus au premier plan sur ce terminal.
TIOCSPGRP const pid_t *argp
Équivalent à
tcsetpgrp(fd, *argp).
Définit l’identifiant du groupe de processus au
premier plan du terminal.
TIOCGSID pid_t *argp
Get the session ID of the given terminal. This fails with the error ENOTTY if the terminal is not a master pseudoterminal and not our controlling terminal. Strange.
Mode
exclusif
TIOCEXCL void
Put the terminal into exclusive mode. No further open(2) operations on the terminal are permitted. (They fail with EBUSY, except for a process with the CAP_SYS_ADMIN capability.)
TIOCGEXCL int *argp
(since Linux 3.8) If the terminal is currently in exclusive mode, place a nonzero value in the location pointed to by argp; otherwise, place zero in *argp.
TIOCNXCL void
Désactive le mode exclusif.
Paramètres
de la ligne (« line discipline »)
TIOCGETD int *argp
Récupère les paramètres de la ligne du terminal.
TIOCSETD const int *argp
Définit les paramètres de la ligne (« line discipline ») du terminal.
ioctls pour
les pseudoterminaux
TIOCPKT const int *argp
Active (quand *argp n’est pas nul) ou désactive le mode paquet. Ne peut être appliqué qu’à la partie maître d’un pseudoterminal (renvoie ENOTTY sinon). En mode paquet, chaque read(2) suivant renverra un paquet qui contient soit un seul octet de contrôle non nul ou un unique octet nul suivi par les données écrites du côté esclave du pseudoterminal. Si le premier octet n’est pas TIOCPKT_DATA (0), il s’agit d’un OU logique entre les bits suivants :
TIOCPKT_FLUSHREAD
Le tampon de lecture du terminal est vidé.
TIOCPKT_FLUSHWRITE Le tampon d’écriture du
terminal est vidé.
TIOCPKT_STOP La sortie vers le terminal est
arrêtée.
TIOCPKT_START La sortie vers le terminal est
relancée.
TIOCPKT_DOSTOP Les caractères de relance et
d’arrêt sont ^S/^Q.
TIOCPKT_NOSTOP Les caractères de relance et
d’arrêt ne sont
pas ^S/^Q.
While this mode is in use, the presence of control status information to be read from the master side may be detected by a select(2) for exceptional conditions or a poll(2) for the POLLPRI event.
Ce mode est utilisé par rlogin(1) et rlogind(8) pour implémenter l’envoi distant du contrôle de flux (^S/^Q) en local.
TIOCGPKT |
const int *argp |
(since Linux 3.8) Return the current packet mode setting in the integer pointed to by argp.
TIOCSPTLCK |
int *argp |
Set (if *argp is nonzero) or remove (if *argp is zero) the pseudoterminal slave device. (See also unlockpt(3).)
TIOCGPTLCK |
int *argp |
(since Linux 3.8) Place the current lock state of the pseudoterminal slave device in the location pointed to by argp.
TIOCGPTPEER |
int flags |
(since Linux 4.13) Given a file descriptor in fd that refers to a pseudoterminal master, open (with the given open(2)-style flags) and return a new file descriptor that refers to the peer pseudoterminal slave device. This operation can be performed regardless of whether the pathname of the slave device is accessible through the calling process’s mount namespace.
Security-conscious programs interacting with namespaces may wish to use this operation rather than open(2) with the pathname returned by ptsname(3), and similar library functions that have insecure APIs. (For example, confusion can occur in some cases using ptsname(3) with a pathname where a devpts filesystem has been mounted in a different mount namespace.)
Les ioctls BSD TIOCSTOP, TIOCSTART, TIOCUCNTL et TIOCREMOTE n’ont pas été implémentés sous Linux.
Contrôle des modems
TIOCMGET |
int *argp |
Get the status of modem bits.
TIOCMSET |
const int *argp |
Set the status of modem bits.
TIOCMBIC |
const int *argp |
Clear the indicated modem bits.
TIOCMBIS |
const int *argp |
Set the indicated modem bits.
The following bits are used by the above ioctls:
TIOCM_LE DSR
(data set ready/line enable)
(terminal de transmission de données - modem -
prêt)
TIOCM_DTR DTR (data terminal ready)
(terminal de données - ordinateur - prêt)
TIOCM_RTS RTS (request to send)
(demande d’émission)
TIOCM_ST Secondary TXD (transmit)
(transmission de données)
TIOCM_SR Secondary RXD (receive)
(réception de données)
TIOCM_CTS CTS (clear to send)
(prêt à émettre)
TIOCM_CAR DCD (data carrier detect)
(porteuse détectée)
TIOCM_CD voir TIOCM_CAR
TIOCM_RNG RNG (ring)
(indicateur d’appel)
TIOCM_RI voir TIOCM_RNG
TIOCM_DSR DSR (data set ready)
(terminal de transmission de données - modem -
prêt)
TIOCMIWAIT |
int arg |
Wait for any of the 4 modem bits (DCD, RI, DSR, CTS) to change. The bits of interest are specified as a bit mask in arg, by ORing together any of the bit values, TIOCM_RNG, TIOCM_DSR, TIOCM_CD, and TIOCM_CTS. The caller should use TIOCGICOUNT to see which bit has changed.
TIOCGICOUNT |
struct serial_icounter_struct *argp |
Get counts of input serial line interrupts (DCD, RI, DSR, CTS). The counts are written to the serial_icounter_struct structure pointed to by argp.
Note: both 1->0 and 0->1 transitions are counted, except for RI, where only 0->1 transitions are counted.
Marquer une ligne comme étant locale
TIOCGSOFTCAR |
int *argp |
(GSOFTCAR : « Get SOFTware CARrier flag ») Récupère l’état du drapeau CLOCAL dans le champ c_cflag de la structure termios.
TIOCSSOFTCAR |
const int *argp |
(SSOFTCAR : « Set SOFTware CARrier flag ») Positionne le drapeau CLOCAL de la structure termios si *argp n’est pas nulle, et l’efface dans le cas contraire.
Si le drapeau CLOCAL d’une ligne est désactivé, le signal de détection de porteuse (DCD) est significatif et un appel à open(2) sur le terminal correspondant sera bloqué tant que le signal DCD sera maintenu, à moins que le drapeau O_NONBLOCK soit fourni. Si CLOCAL est positionné, la ligne se comporte comme si DCD était maintenu en permanence. Le drapeau logiciel pour la porteuse est généralement positionné pour les périphériques locaux et désactivé pour les lignes par modem.
Spécifique
à Linux
For the TIOCLINUX ioctl, see
ioctl_console(2).
Débogage
du noyau
#include <linux/tty.h>
TIOCTTYGSTRUCT |
struct tty_struct *argp |
Get the tty_struct corresponding to fd. This command was removed in Linux 2.5.67.
VALEUR RENVOYÉE
L’appel système ioctl(2) renvoie 0 en cas de succès. En cas d’erreur, il renvoie -1 et positionne errno comme il faut.
ERREURS
EINVAL |
Paramètre de commande non valable. |
ENOIOCTLCMD
Commande inconnue.
ENOTTY |
fd inapproprié. |
|||
EPERM |
Droits insuffisants. |
EXEMPLES
Vérifier la condition DTR sur un port série.
#include <termios.h> #include <fcntl.h> #include <sys/ioctl.h> int main(void) { int fd, serial; fd = open("/dev/ttyS0", O_RDONLY); ioctl(fd, TIOCMGET, &serial); if (serial & TIOCM_DTR) puts("TIOCM_DTR is set"); else puts("TIOCM_DTR is not set"); close(fd); }
VOIR AUSSI
ldattach(1), ioctl(2), ioctl_console(2), termios(3), pty(7)
COLOPHON
Cette page fait partie de la publication 5.07 du projet man-pages Linux. Une description du projet et des instructions pour signaler des anomalies et la dernière version de cette page, peuvent être trouvées à l’adresse https://www.kernel.org/doc/man-pages/.
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 [AT] laposte.net>, Thierry Vignaud <tvignaud [AT] mandriva.com>, François Micaux, Alain Portal <aportal [AT] univ-montp2.fr>, Jean-Philippe Guérard <fevrier [AT] tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon [AT] wanadoo.fr>, Julien Cristau <jcristau [AT] debian.org>, Thomas Huriaux <thomas.huriaux [AT] gmail.com>, Nicolas François <nicolas.francois [AT] centraliens.net>, Florentin Duneau <fduneau [AT] gmail.com>, Simon Paillard <simon.paillard [AT] resel.fr>, Denis Barbier <barbier [AT] debian.org> et David Prévot <david [AT] tilapin.org>
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 à <debian-l10n-french [AT] lists.org>.