ioctl(2) System Calls Manual ioctl(2) NOM ioctl - Controler les peripheriques BIBLIOTHEQUE Bibliotheque C standard (libc, -lc) SYNOPSIS #include int ioctl(int desc_fic, unsigned long operation, ...); /* glibc, BSD */ int ioctl(int desc_fic, int operation, ...); /* musl, autres 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 operations ioctl(). L'argument desc_fic doit etre un descripteur de fichier ouvert. Le second argument est le code de l'operation 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 valable), et sera ainsi nomme dans le reste de cette page. Une operation 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 definitions decrivant une operation ioctl() se trouvent dans le fichier . Voir NOTES. VALEUR RENVOYEE En general, ioctl renvoie 0 s'il reussit. Certaines operations ioctl utilisent la valeur de retour comme parametre de sortie et renvoient une valeur non negative si elles reussissent. En cas d'echec, -1 est renvoye et errno est positionnee 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 valable. EINVAL L'operation ou l'argument argp ne sont pas valables. ENOTTY desc_fic n'est pas associe avec un fichier special en mode caractere. ENOTTY L'operation indiquee ne s'applique pas au type d'objet associe avec le descripteur desc_fic. VERSIONS Les arguments, les valeurs de retour et la semantique de ioctl() varient en fonction du pilote de 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 La version 7 d'UNIX AT&T a ioctl(int desc_fic, int operation, struct sgttyb *argp); ou struct sgttyb a historiquement ete utilise par stty(2) et gtty(2) et est polymorphe pour le type d'operation (tel qu'un void * le serait s'il etait disponible). SysIII documente arg sans aucun type. 4.3BSD a ioctl(int desc_fic, unsigned long operation, char *argp); avec char * integre de facon similaire pour void *. SysVr4 a int ioctl(int desc_fic, int operation, ... /* 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 d'operation ioctl sont des constantes 32 bits. En principe, ces constantes sont totalement arbitraires, mais des gens ont essaye de construire une certaine structure avec elles. Avant, sous Linux, il y avait principalement des constantes de 16 bits, ou le dernier octet est un numero de serie et le(s) precedent(s) octet(s) donne(nt) 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 a une valeur de 0x00435906, avec 0x43 0x59 = 'C' 'Y' indiquant le pilote Cyclades. Plus tard (0.98p5), des informations supplementaires ont ete integrees dans le numero. L'une a deux bits de direction (00 : aucun, 01 : ecriture, 10 : lecture, 11 : lecture/ecriture), suivis de 14 bits de taille (donnant la taille de l'argument), suivis d'un autre de type de 8 bits (recuperant les ioctls dans des groupes pour une utilisation generique ou un pilote commun) et d'un numero de serie de 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 une appellation inappropriee : 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 boguees qui utilisent sizeof(sizeof(struct)), soit a cause de valeurs patrimoniales. Ainsi, il semble que cette nouvelle structure ne procure que des inconvenients : elle n'aide pas a faire des verifications, mais il entraine des valeurs variables pour les differentes architectures. VOIR AUSSI execve(2), fcntl(2), ioctl_console(2), ioctl_fat(2), ioctl_fs(2), ioctl_fsmap(2), ioctl_nsfs(2), ioctl_tty(2), ioctl_userfaultfd(2), ioctl_eventpoll(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 , Jean-Philippe MENGUAL et Jean-Paul Guillonneau 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.9.1 13 juin 2024 ioctl(2)