1octls(2) System Calls Manual 1octls(2) NOM ioctl - Controler les peripheriques BIBLIOTHEQUE Bibliotheque C standard (libc, -lc) SYNOPSIS #include int ioctl(int fd, unsigned long request, ...); /* glibc, BSD */ int ioctl(int fd, int request, ...); /* musl, other UNIX */ DESCRIPTION L'appel systeme ioctl() modifie le comportement des peripheriques sous-jacents des fichiers speciaux. En particulier, de nombreuses caracteristiques des fichiers speciaux en mode caractere (par exemple des terminaux) peuvent etre controlees avec des requetes ioctl(). L'argument d doit etre un descripteur de fichier ouvert. Le second argument est le code de la requete dependant du peripherique. Le troisieme argument est un pointeur non type. Il est traditionnellement defini en char *argp (cela date de l'epoque avant que void * soit du C valide), et sera ainsi nomme dans le reste de cette page. Une requete ioctl() encapsule le fait que l'argument est un parametre d'entree ou de sortie ainsi que la taille de l'argument argp en octets. Les macros et constantes symboliques decrivant les requetes ioctl() se trouvent dans le fichier . Voir NOTES. VALEUR RENVOYEE En general, ioctl renvoie 0 s'il reussit. Certaines requetes ioctl utilisent la valeur de retour comme parametre de sortie, et renvoient une valeur positive si elles reussissent. En cas d'echec, -1 est renvoye et errno est positionne 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 requete ou l'argument argp n'est pas valide. ENOTTY fd n'est pas associe avec un fichier special en mode caractere. ENOTTY La requete indiquee ne s'applique pas au type d'objet associe avec le descripteur fd. VERSIONS Les arguments, les valeurs de retour, et la semantique de ioctl() varient en fonction du peripherique concerne (cet appel systeme est utilise pour encapsuler les operations qui ne se conforment pas bien au modele UNIX des entrees/sorties par flux). STANDARDS Aucun. HISTORIQUE Version 7 AT&T UNIX has ioctl(int fildes, int request, struct sgttyb *argp); (where struct sgttyb has historically been used by stty(2) and gtty(2), and is polymorphic by request type (like a void * would be, if it had been available)). SysIII documents arg without a type at all. 4.3BSD has ioctl(int d, unsigned long request, char *argp); (with char * similarly in for void *). SysVr4 has int ioctl(int fildes, int request, ... /* arg */); 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 desires, qui peuvent etre evites 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, ou le dernier octet est un numero de serie et celui/ceux precedent(s) donnent un type indiquant le pilote. Parfois, le nombre majeur etait utilise : 0x03 pour les ioctls HDIO_*, 0x06 pour les ioctls LP*. Et parfois, une ou plusieurs lettres ASCII etaient utilisees. 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 supplementaires ont ete construites dans le numero. L'une a deux bits de direction (00 : aucun, 01 : ecriture, 10 : lecutre, 11 : lecture/ecriture), suivi de bits de taille 14 (donnant la taille de l'argument), suivi d'un autre de type 8 bits (recuperant les ioctls dans des groupes generalistes ou des pilotes communs) et un numero de serie 8 bits. Les macros decrivant cette structure se trouvent dans , 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 troisieme argument est de type donnee. Notez que les bits de taille ne sont pas fiables du tout : dans de nombreux cas, ils sont faux, soit du fait de macros buguees qui utilisent sizeof(sizeof(struct)), soit a cause de valeurs primitives. Ainsi, il semble que cette nouvelle structure ne procure que des inconvenients : elle n'aide pas a faire des verifications mais provoque une variation de valeurs sur les differentes architectures. VOIR AUSSI execve(2), fcntl(2), ioctl_console(2), ioctl_fat(2), ioctl_ficlone(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) TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot et Jean-Philippe MENGUAL Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.06 31 octobre 2023 1octls(2)