INTRO(2) Manuel du programmeur Linux INTRO(2)
NOM
intro - Introduction à la section des appels systèmes.
DESCRIPTION
Ce chapitre décrit les appels systèmes de Linux. Pour
avoir une liste des 164 appels systèmes disponibles dans
Linux 2.0, voyez la page syscalls(2).
Appel Direct
Dans la plupart des cas il n'est pas nécessaire d'invoquer
directement un appel système, mais il arrive parfois que
la bibliothèque C standard n'implémente pas une fonction
utile.
Synopsis
#include <linux/unistd.h>
une macro _syscall
L'appel systeme désiré
Setup
La chose la plus importante à connaître concernant un
appel système est son prototype. Vous devez connaître le
nombre d'arguments, leurs types, et le type de retour de
la fonction. Il y a 6 macros simplifiant l'appel effectif
au système. Elles ont la forme :
_syscallX(type,name,type1,arg1,type2,arg2,...)
avec X dans l'intervalle 0-5, correspondant
au nombre d'arguments de l'appel
système.
type est le type de la valeur renvoyée par
l'appel système.
name est le nom de l'appel système.
typeN est le type du Nième argument.
argN est le nom du Nième argument.
Ces macros créent une fonction appelée name avec les argu
ments spécifiés. Une fois inclus le _syscall() dans le
fichier source, on effectue l'appel système avec name.
EXEMPLE
#include <stdio.h>
#include <linux/unistd.h> /* les macros _syscallX */
#include <linux/kernel.h> /* pour struct sysinfo */
_syscall1(int, sysinfo, struct sysinfo *, info);
Linux 21 Septembre 1998 1
INTRO(2) Manuel du programmeur Linux INTRO(2)
/*
* Note : Si vous copiez directement depuis le source nroff
* de cette page, n'oubliez pas d'enlever les backslashes
* supplémentaires dans les printf.
*/
int main(void)
{
struct sysinfo s_info;
int error;
error = sysinfo(&s_info);
printf("code d'erreur = %d\n", error);
printf("Uptime = %ds\nCharge: 1 min %d / 5 min %d / 15 min %d\n"
"RAM: totale %d / libre %d / partagee %d\n"
"Mémoire dans buffers = %d\nSwap: total %d / libre %d\n"
"Nombre de processus = %d\n",
s_info.uptime, s_info.loads[0],
s_info.loads[1], s_info.loads[2],
s_info.totalram, s_info.freeram,
s_info.sharedram, s_info.bufferram,
s_info.totalswap, s_info.freeswap,
s_info.procs);
return(0);
}
EXEMPLE D'ÉXÉCUTION
code d'erreur = 0
uptime = 502034s
Charge: 1 min 13376 / 5 min 5504 / 15 min 1152
RAM: totale 15343616 / libre 827392 / partagee 8237056
Mémoire dans buffers = 5066752
Swap: total 27881472 / libre 24698880
Nombre de processus = 40
NOTES
La macro _syscall() ne crée pas de prototype. Il faut le
fournir vous-même, principalement en C++.
Les appels systèmes ne renvoient pas nécessairement des
code d'erreurs tous positifs ou négatifs. Vous devez lire
les sources pour vérifier le retour en erreur. Générale
ment, ce sont des codes d'erreur négatifs, par exemple
-EPERM.
La macro _syscall() renverra le résultat r de l'appel
système quand r est positif ou nul, mais renverra -1
sinon, en positionnant la variable errno a -r.
Certains appels systèmes, comme mmap, nécessitent plus de
cinq arguments. Ceci est géré en plaçant les arguments sur
la pile et en passant un pointeur sur le bloc d'arguments.
Linux 21 Septembre 1998 2
INTRO(2) Manuel du programmeur Linux INTRO(2)
CONFORMITÉ
Dans ce paragraphe, des abréviations indiquent les vari
antes d'Unix, ou des standards dont les appels-systèmes
sont conformes à la description donnée dans ces pages de
manuel. Il s'agit de :
SVr4 System V Release 4 Unix, comme indiqué dans "Pro
grammer's Reference Manual: Operating System API
(Intel processors)" (Prentice-Hall 1992, ISBN
0-13-951294-2)
SVID System V Interface Definition, comme décrit dans
"The System V Interface Definition, Fourth Edi
tion", disponible ftp://ftp.fpk.nov
ell.com/pub/unix-standards/svid sous forme de
fichier Postscript.
POSIX.1
IEEE 1003.1-1990 part 1, connu également sous le
nom de ISO/IEC 9945-1:1990s, ou le nom "IEEE
Portable Operating System Interface for Computing
Environments", comme indiqué dans Donald Lewine
"POSIX Programmer's Guide" (O'Reilly & Associates,
Inc., 1991, ISBN 0-937175-73-0.
POSIX.1b
IEEE Std 1003.1b-1993 (POSIX.1b standard) décrivant
les options temps-réel des systèmes d'exploitations
portables, aussi connu sous le nom de ISO/IEC
9945-1:1996, indiqué dans "Programming for the real
world - POSIX.4" de Bill O. Gallmeister (O'Reilly &
Associates, Inc. ISBN 1-56592-074-0).
4.3BSD/4.4BSD
Les distributions 4.3 et 4.4 de l'Unix Berkeley BSD
était compatible avec 4.3.
V7 Version 7, l'Unix ancestral des Laboratoires Bell.
FICHIERS
/usr/include/linux/unistd.h
AUTEURS
Dans l'en-tête de la page de manuel se trouvent le nom des
auteurs et les conditions de copyright. Ceci peut changer
suivant les pages !
VERSION FRANCAISE
La traduction de la section 2 des pages de manuel a été
effectuée en tentant de rester le plus fidèle possible au
texte original. Il nous est arrivé cependant d'ajouter
certains commentaires explicatifs supplémentaires, et même
quelques exemples.
Linux 21 Septembre 1998 3
INTRO(2) Manuel du programmeur Linux INTRO(2)
Dans la partie NOM des pages, on trouvera souvent entre
parenthèses un terme anglais correspondant au mot
français. Loin de nous l'idée de vouloir expliquer au
lecteur que filesystem signifie système de fichiers, mais
ceci élargit les possibilités de recherche des pages avec
la commande apropos(1)
Pour que cette commande fonctionne, il vous faut modifier
le script makewhatis (souvent dans /usr/sbin) afin qu'il
accepte l'identificateur de section NOM à égalité avec
NAME.
Nous avons également uniformisé l'ensemble des en-têtes et
bas de pages de la section 2.
TRADUCTION
Christophe Blaess, 1997.
Linux 21 Septembre 1998 4