NOM¶
tty_ioctl - Ioctl pour les terminaux et lignes série
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.
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.
- 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
- Récupère l'identifiant de session du terminal donné.
L'appel échouera avec pour erreur ENOTTY si le terminal
n'est pas un pseudoterminal 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 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
- 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.
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(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.
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.65 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¶
Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a
<
http://po4a.alioth.debian.org/> par l'équipe de traduction
francophone au sein du projet perkamon
<
http://perkamon.alioth.debian.org/>.
Christophe Blaess <
http://www.blaess.fr/christophe/> (1996-2003), Alain
Portal <
http://manpagesfr.free.fr/> (2003-2006). Simon Paillard et
l'équipe francophone de traduction de Debian (2006-2009).
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> ».