たいていの場合、glibc のラッパー関数はかなり簡単なもので、 システムコールを起動する前に引き数を適切なレジスタにコピーし、 システムコールが返った後は errno を適切に設定する以外は、ほとんど処理を行わない (これらは、ラッパー関数が提供されていない場合に システムコールを起動するのに使用する syscall(2) により実行される処理と同じである)。 [注意] システムコールは失敗を示すのに負のエラー番号を呼び出し元に返す。 失敗が起こった際には、ラッパー関数は返されたエラー番号を反転して (正の値に変換し)、それを errno にコピーし、ラッパー関数の呼び出し元に -1 を返す。
しかしながら、時には、ラッパー関数がシステムコールを起動する前に 何らかの追加の処理を行う場合がある。 例えば、現在、 二つの関連するシステムコール truncate(2) と truncate64(2) があり、glibc のラッパー関数 truncate() は、カーネルがこれらのシステムコールのうちどちらを提供しているかをチェックし、 どちらを採用するかを決定する。
カーネル 2.6.28 で利用可能なシステムコールのリストを以下に示す (それ以前のカーネルでだけ利用可能なものも少数だが含まれる):
| System call | Kernel | Notes |
| _llseek(2) | 1.2 | |
| _newselect(2) | ||
| _sysctl(2) | ||
| accept(2) | ||
| accept4(2) | 2.6.28 | |
| access(2) | ||
| acct(2) | ||
| add_key(2) | 2.6.11 | |
| adjtimex(2) | ||
| afs_syscall(2) | Not implemented | |
| alarm(2) | ||
| alloc_hugepages(2) | 2.5.36 | Removed in 2.5.44 |
| bdflush(2) | ||
| bind(2) | ||
| break(2) | Not implemented | |
| brk(2) | ||
| cacheflush(2) | 1.2 | Not on 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) | ||
| dup3(2) | 2.6.27 | |
| epoll_create(2) | 2.6 | |
| epoll_create1(2) | 2.6.27 | |
| epoll_ctl(2) | 2.6 | |
| epoll_pwait(2) | 2.6.19 | |
| epoll_wait(2) | 2.6 | |
| eventfd(2) | 2.6.22 | |
| eventfd2(2) | 2.6.27 | |
| execve(2) | ||
| exit(2) | ||
| exit_group(2) | 2.6 | |
| 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 | Removed in 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) | Not implemented | |
| ftruncate(2) | ||
| ftruncate64(2) | 2.4 | |
| futex(2) | 2.6 | |
| 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 | |
| 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 | Not on i386 |
| getpgid(2) | ||
| getpgrp(2) | ||
| getpid(2) | ||
| getpmsg(2) | Not implemented | |
| 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) | Not implemented | |
| idle(2) | Not implemented | |
| init_module(2) | ||
| inotify_add_watch(2) | 2.6.13 | |
| inotify_init(2) | 2.6.13 | |
| inotify_init1(2) | 2.6.27 | |
| inotify_rm_watch(2) | 2.6.13 | |
| io_cancel(2) | 2.6 | |
| io_destroy(2) | 2.6 | |
| io_getevents(2) | 2.6 | |
| io_setup(2) | 2.6 | |
| io_submit(2) | 2.6 | |
| 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) | Not implemented | |
| 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) | Not implemented | |
| 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 | Not on i386 |
| pciconfig_read(2) | 2.0.26; 2.2 | Not on i386 |
| pciconfig_write(2) | 2.0.26; 2.2 | Not on i386 |
| personality(2) | 1.2 | |
| phys(2) | Not implemented | |
| pipe(2) | ||
| pipe2(2) | 2.6.27 | |
| pivot_root(2) | 2.4 | |
| poll(2) | 2.2 | |
| ppoll(2) | 2.6.16 | |
| prctl(2) | 2.2 | |
| pread64(2) | Added as "pread" in 2.2; | |
| renamed "pread64" in 2.6 | ||
| preadv(2) | 2.6.30 | |
| prof(2) | Not implemented | |
| profil(2) | Not implemented | |
| pselect6(2) | 2.6.16 | |
| ptrace(2) | ||
| putpmsg(2) | Not implemented | |
| pwrite64(2) | Added as "pwrite" in 2.2; | |
| renamed "pwrite64" in 2.6 | ||
| pwritev(2) | 2.6.30 | |
| 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 | |
| sched_getparam(2) | 2.0 | |
| sched_getscheduler(2) | 2.0 | |
| sched_rr_get_interval(2) | 2.0 | |
| sched_setaffinity(2) | 2.6 | |
| sched_setparam(2) | 2.0 | |
| sched_setscheduler(2) | 2.0 | |
| sched_yield(2) | 2.0 | |
| security(2) | Not implemented | |
| 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 | |
| set_tid_address(2) | 2.6 | |
| set_zone_reclaim(2) | 2.6.13 | Removed in 2.6.16 (was never |
| available to userspace) | ||
| 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) | Removed in 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 | |
| signalfd4(2) | 2.6.27 | |
| 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 only |
| spu_run(2) | 2.6.16 | PowerPC only |
| ssetmask(2) | ||
| stat(2) | ||
| stat64(2) | 2.4 | |
| statfs(2) | ||
| statfs64(2) | 2.6 | |
| stime(2) | ||
| stty(2) | Not implemented | |
| 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) | Not implemented | |
| ugetrlimit(2) | 2.4 | |
| ulimit(2) | Not implemented | |
| 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) | Not implemented | |
| wait4(2) | ||
| waitid(2) | 2.6.10 | |
| waitpid(2) | ||
| write(2) | ||
| writev(2) | 2.0 |
i386 を含む多くのプラットフォームでは、ソケット関連のシステムコールは (glibc のラッパー関数を介してだが) すべて socketcall(2) 経由に多重されている。 同様に、System V IPC 関連のシステムコールは ipc(2) 経由に多重されている。
たいていは、 /usr/include/asm/unistd.h で定義されている番号 __NR_xxx のシステムコールのコードは、 カーネル・ソースの sys_xxx() というルーチンに書かれている (i386 における実行テーブルは /usr/src/linux/arch/i386/kernel/entry.S に書かれている)。 しかしこれには多くの例外がある。古いシステムコールは新版に置き換えられて きたが、この置き換えはあまり体系立てて行われて来なかったからである。 parisc, sparc, sparc64, alpha といったプロプリエタリ OS のエミュレーション 機能があるプラットフォームでは、多くの追加システムコールがある。 mips64 には、32 ビットシステムコールのフルセットも含まれている。
時間の経過とともに、いくつかのシステムコールではインタフェースの 変更が必要になってきた。 こうした変更の理由の一つは、システムコールに渡される構造体やスカラー値 のサイズを増やす必要があることだった。 これらの変更の結果、現在では、同様の処理を実行するが 引き数のサイズなどの詳細は異なる、一連のシステムコール群が いくつか存在する (例えば、 truncate(2) と truncate64(2))。 (すでに述べたように、 一般にはアプリケーションがこのことを意識することはない。 glibc のラッパー関数が、適切なシステムコールを起動し、古いバイナリに 対して ABI レベルでの互換性を保持することを保証する処理を行っている。) 複数のバージョンが存在するシステムコールの例を以下に挙げる。
64-bit ファイルアクセスと 32-bit UID のみを持つ 新しいプラットフォーム (alpha, ia64, s390x など) では、 *64 や *32 という名前のシステムコールはない。 *64 や *32 というシステムコールが存在する場合、 *64 や *32 がついていないシステムコールは廃止扱いである。