NOM
tty ioctl - ioctl pour les terminaux et lignes série.
SYNOPSIS
#include <termios.h>
int ioctl(int fd, int cmd, ...);
Les appels système ioctl() 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
Fixe l’état du verrou de la structure termios du terminal. Seul
un superutilisateur (plus précisément : 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
Fixe 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
pseudo-terminal maître, envoie à l’esclave. Dans les version de
Linux antérieure à 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 une superutilisateur (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. 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).
Fixe l’identifiant du groupe de processus au premier plan du
terminal.
TIOCGSID pid_t *argp
Récupère l’identifiant de session du terminal donné. L’appel
échouera avec pour erreur ENOTTY si le terminal n’est pas un
pseudo-terminal maître et n’est pas notre terminal de contrôle.
Étrange.
Mode exclusif
TIOCEXCL void
Met le terminal en mode exclusif. Plus aucun appel open(2) sur
le terminal ne sera autorisé. (Ils échoueront avec l’erreur
EBUSY, sauf pour un superutilisateur, c’est-à-dire un processus
ayant la capacité CAP_SYS_ADMIN.)
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
Fixe les paramètres de la ligne (« line discipline ») du
terminal.
ioctls pour les pseudo-terminaux
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 pseudo-terminal
(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 pseudo-terminal. 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.
Tant que ce mode est utilisé, la présence d’information d’état
de contrôle à lire du côté maître peut être détectée avec
select(2) pour les conditions exceptionnelles.
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.
Les ioctls BSD TIOCSTOP, TIOCSTART, TIOCUCNTL et TIOCREMOTE
n’ont pas été implémentés sous Linux.
Contrôle des modems
TIOCMGET int *argp
Récupère l’état des bits du modem.
TIOCMSET const int *argp
Positionner l’état des bits du modem.
TIOCMBIC const int *argp
Efface les bits du modem indiqués.
TIOCMBIS const int *argp
Positionner les bits du modem indiqués.
Les bits utilisés par ces quatre ioctls sont :
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)
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
Pour l’ioctl TIOCLINUX, reportez-vous à console_ioctl(4).
Débogage du noyau
#include <linux/tty.h>
TIOCTTYGSTRUCT struct tty_struct *argp
Récupère la structure tty_struct correspondant à fd.
VALEUR RENVOYÉE
L’appel système ioctl() 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.
EXEMPLE
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 non positionné");
else
puts("TIOCM_DTR mis");
close(fd);
}
VOIR AUSSI
ioctl(2), termios(3), console_ioctl(4), pty(7)
COLOPHON
Cette page fait partie de la publication 3.23 du projet man-pages
Linux. Une description du projet et des instructions pour signaler des
anomalies peuvent être trouvées à l’adresse
http://www.kernel.org/doc/man-pages/.
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, et mise à
disposition sur http://manpagesfr.free.fr/.
Les mises à jour et corrections de la version présente dans Debian sont
directement gérées par Simon Paillard
<simon.paillard@resel.enst-bretagne.fr> et l’équipe francophone de
traduction de Debian.
Veuillez signaler toute erreur de traduction en écrivant à
<debian-l10n-french@lists.debian.org> ou 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> ».