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  ⟨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 ⟨⟩.