Loading

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 dun 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 lentré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> ».