SYSCALLS
Section : Manuel du programmeur Linux (
2)
Mise à jour de la version anglaise : 19 juin 2008
Index
Menu principal
NOM
syscalls - Liste des appels système
SYNOPSIS
Les appels système de Linux.
DESCRIPTION
L'appel système est l'interface fondamentale entre une application
et le noyau Linux.
Appels système et fonctions enveloppes de la bibliothèque
Les appels système ne sont généralement pas invoqués de manière directe
mais plutôt à travers les fonctions enveloppes de la glibc (ou parfois
d'une autre bibliothèque).
Pour les détails sur l'invocation directe d'un appel système, voir
intro(2).
Souvent, mais pas toujours, le nom de la fonction enveloppe est
le même que celui de l'appel système qu'elle invoque.
Par exemple, la fonction
truncate()
de la glibc invoque l'appel système sous-jacent.
Souvent, les fonctions enveloppes de la glibc sont très courtes,
ne réalisant que quelques instructions avant d'invoquer l'appel système.
Quelque fois, pourtant, la fonction enveloppe effectue un travail
supplémentaire avant d'invoquer l'appel système.
Par exemple, il y a aujourd'hui (pour des raisons décrites plus loin)
deux appels système similaires,
truncate(2)
et
truncate64(2),
et la fonction enveloppe
truncate()
de la glibc vérifie quels appels système sont fournis par le noyau
et détermine celui qui doit être utilisé.
Liste des appels système
Ci-dessous se trouve une liste des appels système qui sont communs
à la plupart des plates-formes.
Dans cette liste, la colonne
Noyau
indique la version du noyau pour les appels système qui sont nouveaux
dans Linux 2.2 ou qui ont été introduits depuis cette version.
Veuillez noter les points suivants :
- *
-
Si aucune version de noyau n'est indiquée, c'est que l'appel système
a été introduit dans le noyau 1.0 ou antérieur.
- *
-
Lorsqu'un appel système est marqué « 1.2 », cela signifie que l'appel
système a probablement été introduit dans une version 1.1.x du noyau,
et qu'il a donc eté introduit dans le noyau stable 1.2.
(Le développement du noyau 1.2 a débuté à partir d'une branche
de la version 1.0.6, au travers de la série non stable des noyaux 1.1.x.)
- *
-
Lorsqu'un appel système est marqué « 2.0 », cela signifie que l'appel
système a probablement été introduit dans une version 1.3.x du noyau,
et qu'il a donc eté introduit dans le noyau stable 2.0.
(Le développement du noyau 2.0 a débuté à partir d'une branche
de la version 1.2.x, aux alentours de la version 1.2.10,
au travers de la série non stable des noyaux 1.3.x.)
- *
-
Lorsqu'un appel système est marqué « 2.2 », cela signifie que l'appel
système a probablement été introduit dans une version 2.1.x du noyau,
et qu'il a donc eté introduit dans le noyau stable 2.2.0.
(Le développement du noyau 2.2 a débuté à partir d'une branche
de la version 2.0.21, au travers de la série non stable des noyaux 2.1.x.)
- *
-
Lorsqu'un appel système est marqué « 2.4 », cela signifie que l'appel
système a probablement été introduit dans une version 2.3.x du noyau,
et qu'il a donc eté introduit dans le noyau stable 2.4.0.
(Le développement du noyau 2.2 a débuté à partir d'une branche
de la version 2.2.8, au travers de la série non stable des noyaux 2.3.x.)
- *
-
Lorsqu'un appel système est marqué « 2.6 », cela signifie que l'appel
système a probablement été introduit dans une version 2.5.x du noyau,
et qu'il a donc eté introduit dans le noyau stable 2.6.0.
(Le développement du noyau 2.2 a débuté à partir d'une branche
de la version 2.4.15, au travers de la série non stable des noyaux 2.5.x.)
- *
-
À partir du noyau 2.6.0, le modèle de développement a changé et les
nouveaux appels système peuvent apparaître dans chaque version 2.6.x.
Dans ce cas, le numéro exact de la version dans laquelle l'appel système
a été indroduit est indiqué.
- *
-
Dans certains cas, un appel système a été ajouté à un noyau de la série
stable après l'embranchement provenant de la série stable précédente,
puis a été retro-porté dans la série stable précédente.
Par exemple, certains appels système introduits dans les
versions 2.6.x ont été également rétro-portés dans les versions 2.4.x
postérieures à la version 2.4.15.
Dans ce cas précis, la version dans laquelle a été introduit l'appel
système est indiquée pour les deux versions majeures du noyau.
La liste des appels système disponibles dans la version 2.6.25
(ou dans certains cas, seulement dans des versions plus anciennes)
est la suivante :
Sur de nombreuses plates-formes, y compris les i386,
les appels des sockets sont multiplexés (par des fonctions enveloppes
de la glibc) à travers
socketcall(2)
et les IPC Système V via
ipc(2).
NOTES
Veuillez noter les points suivants :
- *
-
Bien que des entrées leur soient réservées dans la table des appels
système, les appels système suivants ne sont pas implémentés dans
le noyau standard :
afs_syscall(2),
break(2),
ftime(2),
getpmsg(2),
gtty(2),
idle(2),
lock(2),
madvise1(2),
mpx(2),
phys(2),
prof(2),
profil(2),
putpmsg(2),
security(2),
stty(2),
tuxcall(2),
ulimit(2)
et
vserver(2)
(voir aussi
unimplemented(2)).
Toutefois,
ftime(3),
profil(3)
et
ulimit(3)
existent en tant que routines de la bibliothèque.
L'entrée de
phys(2)
est utilisée depuis le noyau 2.1.116 par
umount(2) ;
phys(2)
ne sera jamais implémenté.
- *
-
Les appels
getpmsg(2)
et
putpmsg(2)
sont pour les noyaux modifiés pour prendre en charge les STREAMS
et ne seront peut-être jamais dans le noyau standard.
En général, le code implémentant l'appel système ayant le numéro
__NR_xxx
dans le fichier
/usr/include/asm/unistd.h
se trouve dans la routine
sys_xxx()
du noyau.
(La table de distribution pour la version i386 se trouve dans
/usr/src/linux/arch/i386/kernel/entry.S.)
Il y a néanmoins plusieurs exceptions, principalement lorsque
d'anciens appels système ont été remplacés par des nouveaux.
Ces cas n'ont pas été traités de manière homogène.
Sur les plates-formes avec une émulation de système propriétaire,
comme parisc, sparc, sparc64 et alpha, il existe de nombreux appels
supplémentaires ; mips64 contient aussi un jeu complet
d'appels système 32 bits.
Au fil du temps, des modifications dans les interfaces de certains
appels système ont été nécessaires.
Une raison justifiant de telles modifications était la nécessité
d'augmenter la taille des structures ou des valeurs scalaires passées
à l'appel système.
À cause de ces modifications, il y a maintenant divers groupes
d'appels système similaires (par exemple,
truncate(2)
et
truncate64(2))
qui effectuent des tâches similaires mais qui se différencient
par des détails comme la taille de leurs arguments.
(Comme indiqué précédemment, les applications n'ont en général pas en
s'en préoccuper : les fonctions enveloppes de la glibc effectuent
certaines tâches pour s'assurer que le bon appel système soit invoqué,
et la compatibilité ABI est préservée pour les anciens binaires.)
Voici des exemples d'appels système qui existent en plusieurs versions :
- *
-
À ce jour, il existe trois versions différentes de
stat(2) :
sys_stat()
(entrée
__NR_oldstat),
sys_newstat()
(entrée
__NR_stat),
et
sys_stat64()
(entrée
__NR_stat64),
le dernier étant le plus courant.
Une histoire similaire s'applique à
lstat(2)
et
fstat(2).
- *
-
De même, les définitions
__NR_oldolduname,
__NR_olduname
et
__NR_uname
concernent les routines
sys_olduname(),
sys_uname()
et
sys_newuname().
- *
-
Dans Linux 2.0, une nouvelle version de
vm86(2)
a été introduite et l'ancienne et la nouvelle routine du noyau s'appellent
sys_vm86old()
et
sys_vm86().
- *
-
Dans Linux 2.4, une nouvelle version de
getrlimit(2)
a été introduite et l'ancienne et la nouvelle routine du noyau s'appellent
sys_old_getrlimit()
(emplacement
__NR_getrlimit)
et
sys_getrlimit()
(emplacement
__NR_ugetrlimit).
- *
-
Linux 2.4 a augmenté la taille des UID et GID de 16 à 32 bits.
Pour permettre cette modification, un ensemble d'appels système
a été ajouté
(par exemple,
chown32(2),
getuid32(2),
getgroups32(2),
setresuid32(2)),
périmant les précédents appels de même nom sans le suffixe « 32 ».
- *
-
Linux 2.4 a ajouté la prise en charge d'applications pour architectures
32 bits afin d'accèder aux gros fichiers (c'est-à-dire les fichiers dont
la taille et la position de la tête de lecture ne peuvent pas être
représentées sur 32 bits.)
Pour permettre cette modification, des remplacements étaient
nécessaires pour les appels système qui manipulaient tailles
et têtes de lecture.
Ainsi, les appels systèmes suivants ont été ajoutés :
fcntl64(2),
ftruncate64(2),
getdents64(2),
stat64(2),
statfs64(2),
et leurs analogues qui travaillent avec les descripteurs de fichier
ou les liens symboliques.
Ces appels système périment les anciens appels systèmes qui,
à l'exception des appels « stat », ont le même nom sans le
suffixe « 64 ».
Sur les plates-formes récentes qui n'ont que des accès aux fichiers
64 bits et des UID 32 bits (par exemple, alpha, ia64, s390x),
il n'y a pas d'appel *64 ou *32.
Quand les appels *64 et *32 existent, les autres versions sont obsolètes.
- *
-
Les appels
rt_sig*
ont été ajoutés dans le noyau 2.2 pour prendre en charge l'ajout des
signaux temps réel (voir
signal(7)).
Ces appels système périment les anciens appels système de même nom
sans le préfixe « 64 ».
- *
-
Les appels système
select(2)
et
mmap(2)
utilisent 5 paramètres ou plus, ce qui a posé des problèmes
avec les méthodes classiques de passage de paramètres sur i386.
Ainsi, alors que les autres architectures disposent de
sys_select()
et
sys_mmap()
correspondant à
__NR_select
et
__NR_mmap,
on trouve sur les i386
old_select()
et
old_mmap()
(routines qui utilisent un pointeur sur un bloc de paramètres)
à leur place.
De nos jours, passer 5 paramètres n'est plus un problème,
et il existe donc un
__NR__newselect
correspondant directement à
sys_select() ;
il en est de même pour
__NR_mmap2.
VOIR AUSSI
syscall(2),
unimplemented(2)
TRADUCTION
Ce document est une traduction réalisée par Christophe Blaess
<http://www.blaess.fr/christophe/> le 12 décembre 1998
et révisée le 2 juillet 2008.
L'équipe de traduction a fait le maximum pour réaliser une adaptation
française de qualité. La version anglaise la plus à jour de ce document est
toujours consultable via la commande : « LANG=C man 2 syscalls ».
N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute
erreur dans cette page de manuel.
Index
- NOM
-
- SYNOPSIS
-
- DESCRIPTION
-
- Appels système et fonctions enveloppes de la bibliothèque
-
- Liste des appels système
-
- NOTES
-
- VOIR AUSSI
-
- TRADUCTION
-
Dernière mise à jour : 2 juillet 2008