Rechercher une page de manuel

Chercher une autre page de manuel:

tty_ioctl

Autres langues

Langue: fr

Autres versions - même langue

Version: 29 décembre 2002 (ubuntu - 01/11/07)

Section: 4 (Pilotes et protocoles réseau)

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() 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 (tty) 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 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).
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 tty donné. S'il s'agit d'un pseudo-terminal maître, envoie à l'esclave. N'importe qui peut utiliser cet appel à condition que la sortie ne soit pas déjà redirigée. Si elle a déjà été redirigée, EBUSY est renvoyé, mais un superutilisateur peut arrêter la redirection en utilisant cet ioctl avec fd pointant vers /dev/console ou /dev/tty0.

Terminal (tty) de contrôle

TIOCSCTTY      int arg
Fait du terminal (tty) donné un terminal de contrôle du processus
courant. Le processus courant 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 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 (tty) donné est le terminal contrôlé par le processus
courant, abandonne le contrôle de ce terminal. 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.)
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 tty.
TIOCSETD        const int *argp
Fixe les paramètres de la ligne (« line discipline ») du tty.

ioctls pour les pseudo-tty

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      t_stopc est « ^S » et t_startc est « ^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é 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

ENOIOCTLCMD
Commande inconnue.
EINVAL
Paramètre de commande non valable.
EPERM
Droits insuffisants.
ENOTTY
fd inapproprié.

EXEMPLE

Vérifier la condition DTR sur un port série.
 #include <termios.h>
 #include <fcntl.h>
 #include <sys/ioctl.h>
 
 main() {
     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)

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> ».

L'honneur, c'est comme les allumettes :
ça ne sert qu'une fois.
-+- Marcel Pagnol -+-