- ioctl
-
En informatique, ioctl, raccourci signifiant input-output control (contrôles des entrées/sorties), est un appel système pour des opérations spécifiques à un périphérique qui ne peuvent être exprimées par un appel système classique. Il reçoit un paramètre spécifiant un code-requête à exécuter ; l'effet de cet appel dépend complètement du code-requête. Les codes-requête sont souvent spécifiques au périphérique. Par exemple, un pilote de CD-ROM qui souhaite éjecter un disque d'un lecteur doit fournir un code-requête à un ioctl pour faire cela. Des codes-requête indépendants du périphérique sont quelquefois utilisés pour donner un accès, depuis l'espace utilisateur, à des fonctions du noyau utilisées uniquement par le cœur du système ou encore en développement.
L'appel-système "ioctl" est apparu pour la première fois dans la version 7 d'Unix sous ce nom. il est supporté par la plupart des systèmes Unix et apparentés, dont Linux et Mac OS X, bien que les codes-requête proposés diffèrent d'un système d'exploitation à l'autre. Microsoft Windows fournit une fonction similaire, nommée "DeviceIoControl", dans son API Win32.
Fonctionnement
Les systèmes d'exploitation conventionnels sont divisés en 2 espaces, l'espace utilisateur et l'espace noyau. Le code d'une application tel qu'un éditeur de texte réside dans l'espace utilisateur, tandis que les fonctionnalités sous-jacentes du système d'exploitation, telle que la pile réseau, résident dans le noyau. Le code du noyau gère les ressources sensibles et met en œuvre les barrières de sécurité et de fiabilité entre les applications ; pour cette raison, les applications dans l'espace utilisateur sont empêchées par le système d'exploitation d'accéder directement aux ressources du noyau.
Les application en espace utilisateur font généralement des requêtes au noyau par l'intermédiaire des appels système, dont le code se trouve dans l'espace noyau. Un appel système prend généralement la forme d'un "vecteur d'appels système", dans lequel l'appel système désiré est indiqué par un numéro d'index. Par exemple, "exit()" peut être l'appel système numéro 1, et "write()" l'appel système numéro 4. Le vecteur d'appels système est utilisé pour trouver la fonction du noyau désirée pour la requête. C'est pourquoi les systèmes d'exploitation classiques offrent généralement plusieurs centaines d'appels système à l'espace utilisateur.
Références
- W. Richard Stevens, Advanced Programming in the UNIX Environment (Addison-Welsey, 1992, ISBN 0-201-56317-7), section 3.14.
- Generic I/O Control operations dans le manuel en ligne de la GNU C Library
- Modèle:Man
- Modèle:Man
- "DeviceIoControl Documentation sur le Microsoft Developer Network
- (en) Cet article est partiellement ou en totalité issu de l’article de Wikipédia en anglais intitulé « ioctl » (voir la liste des auteurs)
Wikimedia Foundation. 2010.