1octls
Section: System Calls (2)
Updated: 5 février 2023
Index
Return to Main Contents
NOM
ioctl - Contrôler les périphériques
BIBLIOTHÈQUE
Bibliothèque C standard (libc, -lc)
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.
STANDARDS
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_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 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 à
Index
- NOM
-
- BIBLIOTHÈQUE
-
- SYNOPSIS
-
- DESCRIPTION
-
- VALEUR RENVOYÉE
-
- ERREURS
-
- STANDARDS
-
- NOTES
-
- structure ioctl
-
- VOIR AUSSI
-
- TRADUCTION
-
This document was created by
man2html,
using the manual pages.
Time: 04:05:21 GMT, May 18, 2024