SYSCALLS(2)

NOM
syscalls - Liste des appels système

SYNOPSIS
Les appels système de Linux 2.4.

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 tout le temps, le nom de la fonction enveloppe est le même que le nom de l'appel système qu'elle invoque. Par exemple, la glibc a une fonction truncate() qui invoque l'appel système sous-jacent. Souvent, la fonction enveloppe de la glibc est ténue, effectuant un tout petit travail 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(3) 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èmes les plus 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 :

*   Lorsqu'aucune version de noyau n'est indiquée, c'est que l'appel système a été introduit dans le noyau 2.0 ou précédent.

*   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é d'une branche du noyau 2.0.21 via les séries de noyaux instables 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é d'une branche du noyau 2.2.8 via les séries de noyaux instables 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é d'une branche du noyau 2.4.15 via les séries de noyaux instables 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é à des séries de noyaux stables après l'embranchement provenant de séries de noyaux stables précédentes, puis a été retro-porté dans les séries de noyaux stables précédentes. Par exemple, certains appels système qui ont été 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 le noyau 2.6.22 (ou dans certains cas, seulement dans des versions plus anciennes) est la suivante :
Appel système | Noyau | Notes
_llseek(2)
_newselect(2)
_sysctl(2)
accept(2)
access(2)
acct(2)
add_key(2) | 2.6.11
adjtimex(2)
afs_syscall(2)
alarm(2)
alloc_hugepages(2) | 2.5.36 | Supprimé dans 2.5.44
bdflush(2)
bind(2)
break(2)
brk(2)
cacheflush(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)
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)
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)
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) |  | Pas sur i386
getpgid(2)
getpgrp(2)
getpid(2)
getpmsg(2) | 2.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)
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)
idle(2)
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)
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)
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)
msgctl(2)
msgget(2)
msgrcv(2)
msgsnd(2)
msync(2)
munlock(2)
munlockall(2)
munmap(2)
nanosleep(2)
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)
phys(2)
pipe(2)
pivot_root(2) | 2.5
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)
profil(2)
pselect6(2) | 2.6.16
ptrace(2)
putpmsg(2) | 2.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)
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)
sched_get_priority_min(2)
sched_getaffinity(2) | 2.6 ; 2.4.19
sched_getparam(2)
sched_getscheduler(2)
sched_rr_get_interval(2)
sched_setaffinity(2) | 2.6 ; 2.4.19
sched_setparam(2)
sched_setscheduler(2)
sched_yield(2)
security(2) | 2.4.11
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
setdomainname(2)
setfsgid(2)
setfsgid32(2) | 2.4
setfsuid(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)
swapoff(2)
swapon(2)
symlink(2)
symlinkat(2) | 2.6.16
sync(2)
sync_file_range(2) | 2.6.17
sysfs(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
times(2)
tkill(2) | 2.6 ; 2.4.22
truncate(2)
truncate64(2) | 2.4
tuxcall(2)
ugetrlimit(2) | 2.4
ulimit(2)
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) | 2.6
wait4(2)
waitid(2) | 2.6.10
waitpid(2)
write(2)
writev(2)

Sur de nombreuses plates-formes, y compris les i386, les appels des sockets sont multiplexés à travers socketcall(2) et les IPC Système V via ipc(2).

NOTES
Veuillez noter les points suivants :

*   Bien que des emplacements leur soient réservés 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'emplacement de phys(2) est utilisé 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 des interfaces de certains appels systèmes 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 ftruncate64(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 :

*   Maintenant, il existe trois versions différentes de stat(2) : sys_stat() (emplacement __NR_oldstat), sys_newstat() (emplacement __NR_stat), et sys_stat64() (emplacement __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 prendre en charge cette modification, une plage d'appels système a été ajoutée (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 prendre en charge cette modification, des remplacements étaient nécessaires pour les appels systèmes 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 w_ 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 de 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() et similairement __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 23 décembre 2007.

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.