Man page - ioctl(2)

Packages contains this manual

Available languages:

en fr pl nl ja ro de

Manual

ioctl

NOM
BIBLIOTHÈQUE
SYNOPSIS
DESCRIPTION
VALEUR RENVOYÉE
ERREURS
VERSIONS
STANDARDS
HISTORIQUE
NOTES
Structure ioctl
VOIR AUSSI
TRADUCTION

NOM

ioctl – ContrĂŽler les pĂ©riphĂ©riques

BIBLIOTHÈQUE

BibliothĂšque C standard ( libc , -lc )

SYNOPSIS

#include <sys/ioctl.h>

int ioctl(int desc_fic , unsigned long opération , ...); /* glibc, BSD */
int ioctl(int
desc_fic , int opération , ...); /* musl, autres UNIX */

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 opĂ©rations ioctl (). L’argument desc_fic doit ĂȘtre un descripteur de fichier ouvert.

Le second argument est le code de l’opĂ©ration 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 valable), et sera ainsi nommĂ© dans le reste de cette page.

Une opĂ©ration 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 dĂ©finitions dĂ©crivant une opĂ©ration 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 opĂ©rations ioctl utilisent la valeur de retour comme paramĂštre de sortie et renvoient une valeur non nĂ©gative si elles rĂ©ussissent. En cas d’échec, -1 est renvoyĂ© et errno est positionnĂ©e 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’ opĂ©ration ou l’argument argp ne sont pas valables.

ENOTTY

desc_fic n’est pas associĂ© avec un fichier spĂ©cial en mode caractĂšre.

ENOTTY

L’opĂ©ration indiquĂ©e ne s’applique pas au type d’objet associĂ© avec le descripteur desc_fic .

VERSIONS

Les arguments, les valeurs de retour et la sémantique de ioctl () varient en fonction du pilote de 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).

STANDARDS

Aucun.

HISTORIQUE

La version 7 d’UNIX AT&T a

ioctl(int desc_fic , int opération , struct sgttyb * argp );

oĂč struct sgttyb a historiquement Ă©tĂ© utilisĂ© par stty (2) et gtty (2) et est polymorphe pour le type d’opĂ©ration (tel qu’un void * le serait s’il Ă©tait disponible).

SysIII documente arg sans aucun type.

4.3BSD a

ioctl(int desc_fic , unsigned long opération , char * argp );

avec char * intégré de façon similaire pour void * .

SysVr4 a

int ioctl(int desc_fic , int opération , ... /* 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 dĂ©sirĂ©s, qui peuvent ĂȘtre Ă©vitĂ©s sous Linux en lui passant le drapeau O_NONBLOCK .

Structure ioctl

Les valeurs d’ opĂ©ration ioctl sont des constantes 32 bits. En principe, ces constantes sont totalement arbitraires, mais des gens ont essayĂ© de construire une certaine structure avec elles.

Avant, sous Linux, il y avait principalement des constantes de 16 bits, oĂč le dernier octet est un numĂ©ro de sĂ©rie et le(s) prĂ©cĂ©dent(s) octet(s) donne(nt) 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 a une valeur de 0x00435906, avec 0x43 0x59 = 'C' 'Y' indiquant le pilote Cyclades.

Plus tard (0.98p5), des informations supplĂ©mentaires ont Ă©tĂ© intĂ©grĂ©es dans le numĂ©ro. L’une a deux bits de direction (00 : aucun, 01 : Ă©criture, 10 : lecture, 11 : lecture/Ă©criture), suivis de 14 bits de taille (donnant la taille de l’argument), suivis d’un autre de type de 8 bits (rĂ©cupĂ©rant les ioctls dans des groupes pour une utilisation gĂ©nĂ©rique ou un pilote commun) et d’un numĂ©ro de sĂ©rie de 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 une appellation inappropriĂ©e : 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 boguées qui utilisent sizeof(sizeof(struct)) , soit à cause de valeurs patrimoniales.

Ainsi, il semble que cette nouvelle structure ne procure que des inconvĂ©nients : elle n’aide pas Ă  faire des vĂ©rifications, mais il entraine des valeurs variables pour les diffĂ©rentes 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 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>, Jean-Philippe MENGUAL <jpmengual@debian.org> et Jean-Paul Guillonneau <guillonneau.jeanpaul@free.fr>

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 à debian-l10n-french@lists.debian.org .