2021-12-24 06:06:52 +11:00
|
|
|
\chapter{I/O control}
|
|
|
|
\label{chap:ioctl} \index{ioctl}
|
|
|
|
|
|
|
|
|
|
|
|
Un des paradigmes les plus connus à propos des systèmes de la
|
|
|
|
famille Unix est : \textsf{Tout est vu comme un fichier}.
|
|
|
|
C'est souvent vrai, mais parfois ce n'est pas suffisant.
|
|
|
|
Prenons rapidement un exemple, le baton de joie\index{joystick}
|
|
|
|
dans Linux.
|
|
|
|
|
|
|
|
\begin{verbatim}
|
2023-10-09 06:56:41 +11:00
|
|
|
int joy_fd;
|
2021-12-24 06:06:52 +11:00
|
|
|
char joy_name[128];
|
|
|
|
|
|
|
|
joy_fd = open(joy_device , O_RDONLY);
|
2023-10-09 06:56:41 +11:00
|
|
|
if (ioctl(joy_fd, JSIOCGNAME(sizeof(joy_name)), joy_name) < 0)
|
|
|
|
strncpy(joy_name, "Unknown", sizeof(joy_name));
|
|
|
|
fprintf(stderr, "Name: \"%s\"\n", joy_name);
|
2021-12-24 06:06:52 +11:00
|
|
|
\end{verbatim}
|
|
|
|
|
2023-10-09 06:56:41 +11:00
|
|
|
La macro \texttt{JSIOCGNAME} étant définie dans le fichier
|
|
|
|
\texttt{/usr/include/linux/joystick.h} comme
|
|
|
|
\texttt{\_IOC(\_IOC\_READ, 'j', 0x13, len)}.
|
2024-07-11 11:25:38 +11:00
|
|
|
Bon, d'accord, j'aurais pu choisir un exemple plus simple,
|
2023-10-09 06:56:41 +11:00
|
|
|
mais vous avez capté le principe\dots
|
2021-12-24 06:06:52 +11:00
|
|
|
|
|
|
|
% =========================================================
|
|
|
|
|
2023-10-09 06:56:41 +11:00
|
|
|
\vspace{5em}
|
|
|
|
|
2024-07-11 11:25:38 +11:00
|
|
|
Ailleurs dans ce document :
|
|
|
|
la gestion des ports série (p. \pageref{rs232}) utilise beaucoup les ioctl,
|
|
|
|
tout comme les webcams (p. \pageref{chap:webcam})
|
2021-12-24 06:06:52 +11:00
|
|
|
|
|
|
|
% =========================================================
|