Provided by: manpages-fr-dev_4.15.0-9_all bug

NOM

       ioctl - Contrôler les périphériques

SYNOPSIS

       #include <sys/ioctl.h>

       int ioctl(int fd, unsigned long request, ...);

DESCRIPTION

       L'appel  système  ioctl()  modifie  le  comportement  des  périphériques  sous‐jacents des
       fichiers spéciaux. En particulier, de nombreuses caractéristiques des fichiers spéciaux en
       mode  caractère  (par  exemple  des  terminaux)  peuvent être contrôlées avec des requêtes
       ioctl(). L'argument d doit être un descripteur de fichier ouvert.

       Le second argument est le code de la  requête  dépendant  du  périphérique.  Le  troisième
       argument  est  un  pointeur non typé. Il est traditionnellement défini en char *argp (cela
       date de l'époque avant que void * soit du C valide), et sera ainsi nommé dans le reste  de
       cette page.

       Une  requête  ioctl()  encapsule  le  fait  que l'argument est un paramètre d'entrée ou de
       sortie ainsi que la taille  de  l'argument  argp  en  octets.  Les  macros  et  constantes
       symboliques décrivant les requêtes ioctl() se trouvent dans le fichier <sys/ioctl.h>. Voir
       NOTES.

VALEUR RENVOYÉE

       En général, ioctl renvoie 0 s'il réussit. Certaines requêtes ioctl utilisent la valeur  de
       retour  comme  paramètre de sortie, et renvoient une valeur positive si elles réussissent.
       En cas d'échec, -1 est renvoyé et errno est positionné pour indiquer l'erreur.

ERREURS

       EBADF  fd n'est pas un descripteur de fichier valable.

       EFAULT argp pointe en dehors de l'espace d'adressage valide.

       EINVAL La requête ou l'argument argp n'est pas valide.

       ENOTTY fd n'est pas associé avec un fichier spécial en mode caractère.

       ENOTTY La requête indiquée ne s'applique pas au type d'objet associé avec  le  descripteur
              fd.

CONFORMITÉ

       Pas  de standard unique. Les arguments, les valeurs de retour, et la sémantique de ioctl()
       varient en  fonction  du  périphérique  concerné  (cet  appel  système  est  utilisé  pour
       encapsuler les opérations qui ne se conforment pas bien au modèle UNIX des entrées/sorties
       par flux).

       L'appel système ioctl() est apparu dans l'UNIX d'AT&T Version 7.

NOTES

       Pour utiliser cet appel, on a besoin d'un descripteur de fichier ouvert. Souvent,  l'appel
       open(2)  a  des  effets  de  bord  non  désirés, qui peuvent être évités sous Linux en lui
       passant le drapeau O_NONBLOCK.

   structure ioctl
       Les valeurs de la commande Ioctl sont des constantes 32 bits. En principe, ces  constantes
       sont totalement abritraires, mais les gens essaient de les structurer.

       Avant, sous Linux, on avait principalement des constantes 16 bits, où le dernier octet est
       un numéro de série et  celui/ceux  précédent(s)  donnent  un  type  indiquant  le  pilote.
       Parfois,  le  nombre  majeur  était  utilisé :  0x03 pour les ioctls HDIO_*, 0x06 pour les
       ioctls LP*. Et parfois, une ou plusieurs lettres ASCII  étaient  utilisées.  Par  exemple,
       TCGETS  a  une  valeur  de 0x00005401, avec 0x54 = 'T' indiquant le pilote du terminal, et
       CYGETTIMEOUT avait une valeur de 0x00435906, avec 0x43 0x59 = 'C' 'Y' indiquant le  pilote
       des cyclades.

       Plus  tard  (0.98p5), des informations supplémentaires ont été construites dans le numéro.
       L'une  a  deux  bits  de  direction  (00 :  aucun,  01 :  écriture,  10 :  lecutre,   11 :
       lecture/écriture),  suivi  de  bits  de taille 14 (donnant la taille de l'argument), suivi
       d'un autre de type 8 bits (récupérant les ioctls dans  des  groupes  généralistes  ou  des
       pilotes communs) et un numéro de série 8 bits.

       Les  macros  décrivant  cette  structure  se  trouvent  dans  <asm/ioctl.h>,  il s'agit de
       _IO(type,nr) et {_IOR,_IOW,_IOWR}(type,nr,size). Elles  utilisent  sizeof(size),  donc  la
       taille est ici un « misnomer » : ce troisième argument est de type donnée.

       Notez  que les bits de taille ne sont pas fiables du tout : dans de nombreux cas, ils sont
       faux, soit du fait de macros buguées qui utilisent sizeof(sizeof(struct)), soit à cause de
       valeurs primitives.

       Ainsi,  il  semble  que  cette  nouvelle structure ne procure que des inconvénients : elle
       n'aide pas à faire des vérifications mais  provoque  une  variation  de  valeurs  sur  les
       différentes architectures.

VOIR AUSSI

       execve(2),     fcntl(2),     ioctl_console(2),     ioctl_fat(2),    ioctl_ficlonerange(2),
       ioctl_fideduperange(2), ioctl_fslabel(2), ioctl_getfsmap(2), ioctl_iflags(2), ioctl_ns(2),
       ioctl_tty(2), ioctl_userfaultfd(2), open(2), sd(4), tty(4)

COLOPHON

       Cette  page  fait partie de la publication 5.13 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@laposte.net>,  Thierry
       Vignaud  <tvignaud@mandriva.com>,  François Micaux, Alain Portal <aportal@univ-montp2.fr>,
       Jean-Philippe   Guérard   <fevrier@tigreraye.org>,   Jean-Luc   Coulon   (f5ibh)    <jean-
       luc.coulon@wanadoo.fr>,    Julien    Cristau    <jcristau@debian.org>,    Thomas   Huriaux
       <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin
       Duneau  <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis
       Barbier <barbier@debian.org>, David Prévot <david@tilapin.org>  et  Jean-Philippe  MENGUAL
       <jpmengual@debian.org>

       Cette  traduction  est  une  documentation libre ; veuillez vous reporter à la GNU General
       Public  License  version 3  ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩   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@lists.debian.org⟩.