SYSCALLS(2)

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 :
Appel système | Noyau | Notes
_llseek(2) | 1.2
_newselect(2)
_sysctl(2)
accept(2)
access(2)
acct(2)
add_key(2) | 2.6.11
adjtimex(2)
afs_syscall(2) |  | Non implémenté
alarm(2)
alloc_hugepages(2) | 2.5.36 | Supprimé dans 2.5.44
bdflush(2)
bind(2)
break(2) |  | Non implémenté
brk(2)
cacheflush(2) | 1.2 | Pas sur i386
capget(2) | 2.2
capset(2) | 2.2
chdir(2)
chmod(2)
chown(2)
chown32(2) | 2.4
chroot(2)
clock_getres(2) | 2.6
clock_gettime(2) | 2.6
clock_nanosleep(2) | 2.6
clock_settime(2) | 2.6
clone(2)
close(2)
connect(2)
creat(2)
create_module(2)
delete_module(2)
dup(2)
dup2(2)
epoll_create(2) | 2.6
epoll_ctl(2) | 2.6
epoll_pwait(2) | 2.6.19
epoll_wait(2) | 2.6
eventfd(2) | 2.6.22
execve(2)
exit(2)
exit_group(2) | 2.6 ; 2.4.20
faccessat(2) | 2.6.16
fadvise64(2) | 2.6
fadvise64_64(2) | 2.6
fallocate(2) | 2.6.23
fchdir(2)
fchmod(2)
fchmodat(2) | 2.6.16
fchown(2)
fchown32(2) | 2.4
fchownat(2) | 2.6.16
fcntl(2)
fcntl64(2) | 2.4
fdatasync(2)
fgetxattr(2) | 2.6 ; 2.4.18
flistxattr(2) | 2.6 ; 2.4.18
flock(2) | 2.0
fork(2)
free_hugepages(2) | 2.5.36 | Supprimé dans 2.5.44
fremovexattr(2) | 2.6 ; 2.4.18
fsetxattr(2) | 2.6 ; 2.4.18
fstat(2)
fstat64(2) | 2.4
fstatat64(2) | 2.6.16
fstatfs(2)
fstatfs64(2) | 2.6
fsync(2)
ftime(2) |  | Non implémenté
ftruncate(2)
ftruncate64(2) | 2.4
futex(2) | 2.6 ; 2.4.19
futimesat(2) | 2.6.16
get_kernel_syms(2)
get_mempolicy(2) | 2.6.6
get_robust_list(2) | 2.6.17
get_thread_area(2) | 2.6 ; 2.4.20
getcpu(2) | 2.6.19
getcwd(2) | 2.2
getdents(2) | 2.0
getdents64(2) | 2.4
getegid(2)
getegid32(2) | 2.4
geteuid(2)
geteuid32(2) | 2.4
getgid(2)
getgid32(2) | 2.4
getgroups(2)
getgroups32(2) | 2.4
getitimer(2)
getpeername(2)
getpagesize(2) | 2.0 | Pas sur i386
getpgid(2)
getpgrp(2)
getpid(2)
getpmsg(2)
getppid(2)
getpriority(2)
getresgid(2) | 2.2
getresgid32(2) | 2.4
getresuid(2) | 2.2
getresuid32(2) | 2.4
getrlimit(2)
getrusage(2)
getsid(2) | 2.0
getsockname(2)
getsockopt(2)
gettid(2) | 2.4.11
gettimeofday(2)
getuid(2)
getuid32(2) | 2.4
getxattr(2) | 2.6 ; 2.4.18
gtty(2) |  | Non implémenté
idle(2) |  | Non implémenté
init_module(2)
inotify_add_watch(2) | 2.6.13
inotify_init(2) | 2.6.13
inotify_rm_watch(2) | 2.6.13
io_cancel(2) | 2.6 ; 2.4.20
io_destroy(2) | 2.6 ; 2.4.20
io_getevents(2) | 2.6 ; 2.4.20
io_setup(2) | 2.6 ; 2.4.20
io_submit(2) | 2.6 ; 2.4.20
ioctl(2)
ioperm(2)
iopl(2)
ioprio_get(2) | 2.6.13
ioprio_set(2) | 2.6.13
ipc(2)
kexec_load(2) | 2.6.7
keyctl(2) | 2.6.11
kill(2)
lchown(2) | 2.2
lchown32(2) | 2.4
lgetxattr(2) | 2.6 ; 2.4.18
link(2)
linkat(2) | 2.6.16
listen(2)
listxattr(2) | 2.6 ; 2.4.18
llistxattr(2) | 2.6 ; 2.4.18
lock(2) |  | Non implémenté
lookup_dcookie(2) | 2.6
lremovexattr(2) | 2.6 ; 2.4.18
lseek(2)
lsetxattr(2) | 2.6 ; 2.4.18
lstat(2)
lstat64(2) | 2.4
madvise(2) | 2.4
madvise1(2) | 2.4
mbind(2) | 2.6.6
migrate_pages(2) | 2.6.16
mincore(2) | 2.4
mkdir(2)
mkdirat(2) | 2.6.16
mknod(2)
mknodat(2) | 2.6.16
mlock(2)
mlockall(2)
mmap(2)
mmap2(2) | 2.4
modify_ldt(2)
mount(2)
move_pages(2) | 2.6.18
mprotect(2)
mpx(2) |  | Non implémenté
mq_getsetattr(2) | 2.6.6
mq_notify(2) | 2.6.6
mq_open(2) | 2.6.6
mq_timedreceive(2) | 2.6.6
mq_timedsend(2) | 2.6.6
mq_unlink(2)
mremap(2) | 2.0
msgctl(2)
msgget(2)
msgrcv(2)
msgsnd(2)
msync(2) | 2.0
munlock(2)
munlockall(2)
munmap(2)
nanosleep(2) | 2.0
nfsservctl(2) | 2.2
nice(2)
oldfstat(2)
oldlstat(2)
oldolduname(2)
oldstat(2)
olduname(2)
open(2)
openat(2) | 2.6.16
pause(2)
pciconfig_iobase(2) | 2.2.15; 2.4 | Pas sur i386
pciconfig_read(2) | 2.0.26 ; 2.2 | Pas sur i386
pciconfig_write(2) | 2.0.26 ; 2.2 | Pas sur i386
personality(2) | 1.2
phys(2) |  | Non implémenté
pipe(2)
pivot_root(2) | 2.4
poll(2) | 2.2
ppoll(2) | 2.6.16
prctl(2) | 2.2
pread64(2) |  | Ajouté en tant que « pread » dans 2.2 ;
 |  | renommé en « pread64 » dans 2.6
prof(2) |  | Non implémenté
profil(2) |  | Non implémenté
pselect6(2) | 2.6.16
ptrace(2)
putpmsg(2)
pwrite64(2) |  | Ajouté en tant que « pwrite » dans 2.2 ;
 |  | renommé en « pwrite64 » dans 2.6
query_module(2) | 2.2
quotactl(2)
read(2)
readahead(2) | 2.4.13
readdir(2)
readlink(2)
readlinkat(2) | 2.6.16
readv(2) | 2.0
reboot(2)
recv(2)
recvfrom(2)
recvmsg(2)
remap_file_pages(2) | 2.6
removexattr(2) | 2.6 ; 2.4.18
rename(2)
renameat(2) | 2.6.16
request_key(2) | 2.6.11
restart_syscall(2) | 2.6
rmdir(2)
rt_sigaction(2) | 2.2
rt_sigpending(2) | 2.2
rt_sigprocmask(2) | 2.2
rt_sigqueueinfo(2) | 2.2
rt_sigreturn(2) | 2.2
rt_sigsuspend(2) | 2.2
rt_sigtimedwait(2) | 2.2
sched_get_priority_max(2) | 2.0
sched_get_priority_min(2) | 2.0
sched_getaffinity(2) | 2.6 ; 2.4.19
sched_getparam(2) | 2.0
sched_getscheduler(2) | 2.0
sched_rr_get_interval(2) | 2.0
sched_setaffinity(2) | 2.6 ; 2.4.19
sched_setparam(2) | 2.0
sched_setscheduler(2) | 2.0
sched_yield(2) | 2.0
security(2) |  | Non implémenté
select(2)
semctl(2)
semget(2)
semop(2)
semtimedop(2) | 2.6 ; 2.4.22
send(2)
sendfile(2) | 2.2
sendfile64(2) | 2.6 ; 2.4.19
sendmsg(2)
sendto(2)
set_mempolicy(2) | 2.6.6
set_robust_list(2) | 2.6.17
set_thread_area(2) | 2.6 ; 2.4.20
set_tid_address(2) | 2.6
set_zone_reclaim(2) | 2.6.13 | Supprimé dans 2.6.16
 |  | (n'a jamais été disponible en espace utilisateur)
setdomainname(2)
setfsgid(2) | 1.2
setfsgid32(2) | 2.4
setfsuid(2) | 1.2
setfsuid32(2) | 2.4
setgid(2)
setgid32(2) | 2.4
setgroups(2)
setgroups32(2) | 2.4
sethostname(2)
setitimer(2)
setpgid(2)
setpriority(2)
setregid(2)
setregid32(2) | 2.4
setresgid(2) | 2.2
setresgid32(2) | 2.4
setresuid(2) | 2.2
setresuid32(2) | 2.4
setreuid(2)
setreuid32(2) | 2.4
setrlimit(2)
setsid(2)
setsockopt(2)
settimeofday(2)
setuid(2)
setuid32(2) | 2.4
setup(2) |  | Supprimé dans 2.2
setxattr(2) | 2.6 ; 2.4.18
sgetmask(2)
shmat(2)
shmctl(2)
shmdt(2)
shmget(2)
shutdown(2)
sigaction(2)
sigaltstack(2) | 2.2
signal(2)
signalfd(2) | 2.6.22
sigpending(2)
sigprocmask(2)
sigreturn(2)
sigsuspend(2)
socket(2)
socketcall(2)
socketpair(2)
splice(2) | 2.6.17
spu_create(2) | 2.6.16 | PowerPC seulement
spu_run(2) | 2.6.16 | PowerPC seulement
ssetmask(2)
stat(2)
stat64(2) | 2.4
statfs(2)
statfs64(2) | 2.6
stime(2)
stty(2) |  | Non implémenté
swapoff(2)
swapon(2)
symlink(2)
symlinkat(2) | 2.6.16
sync(2)
sync_file_range(2) | 2.6.17
sysfs(2) | 1.2
sysinfo(2)
syslog(2)
tee(2) | 2.6.17
tgkill(2) | 2.6
time(2)
timer_create(2) | 2.6
timer_delete(2) | 2.6
timer_getoverrun(2) | 2.6
timer_gettime(2) | 2.6
timer_settime(2) | 2.6
timerfd_create(2) | 2.6.25
timerfd_gettime(2) | 2.6.25
timerfd_settime(2) | 2.6.25
times(2)
tkill(2) | 2.6 ; 2.4.22
truncate(2)
truncate64(2) | 2.4
tuxcall(2) |  | Non implémenté
ugetrlimit(2) | 2.4
ulimit(2) |  | Non implémenté
umask(2)
umount(2)
umount2(2) | 2.2
uname(2)
unlink(2)
unlinkat(2) | 2.6.16
unshare(2) | 2.6.16
uselib(2)
ustat(2)
utime(2)
utimensat(2) | 2.6.22
utimes(2) | 2.6
vfork(2)
vhangup(2)
vm86old(2)
vmsplice(2) | 2.6.17
vserver(2) |  | Non implémenté
wait4(2)
waitid(2) | 2.6.10
waitpid(2)
write(2)
writev(2) | 2.0

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.