Provided by: manpages-fr-dev_4.13-4_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, ou -1 s'il échoue. Certaines requêtes ioctl utilisent la valeur
       de  retour  comme  paramètre de sortie, et renvoient une valeur positive si elles réussissent (et -1 pour
       les erreurs). En cas d'échec, errno contient le code d'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.10 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 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.

Linux                                             11 avril 2020                                         IOCTL(2)