跳转到内容

Linux 内核/系统调用

来自维基教科书,开放世界中的开放书籍

Linux 内核系统调用由 glibc 导出,都在一张纸上

System 

sys/ioctl.h:
ioctl

sys/random.h:
getrandom

pci.h:
pciconfig_read
pciconfig_write

linux/sysctl.h:
sysctl

linux/membarrier.h:
membarrier

sys/klog.h:
syslog

linux/bpf.h:
bpf

grp.h:
setgroups

sys/utsname.h:
uname

linux/getcpu.h:
getcpu

sys/sysinfo.h:
sysinfo

sys/personality.h:
personality

sys/ptrace.h:
ptrace

linux/kexec.h:
kexec_file_load
kexec_load

linux/reboot.h:
reboot

Unexported:
delete_module
init_module
finit_module
perf_event_op
rseq
Time

sys/time.h:
futimesat
utimes
gettimeofday
settimeofday
getitimer, setitimer

time.h:
clock_settime
clock_gettime
clock_getres
clock_nanosleep
time
stime
nanosleep

posix-timers.c:
timer_create
timer_gettime
timer_getoverrun
timer_settime
timer_delete

sys/timerfd.h:
timerfd_create
timerfd_settime
timerfd_gettime

sys/eventfd.h:
eventfd2
eventfd

utime.h:
utime

sys/times.h:
times

bits/time.h:
clock_adjtime

sys/timex.h:
adjtimex
Processes

unistd.h:
fork, vfork
brk
getpid, getppid, getpgrp
uselib
execve, execveat
nice
getgroups
getgid, setgid
getuid, setuid
getresuid, setresuid
getresgid, setresgid
getsid, setsid
setpgid, getpgid
getegid, geteuid 
setreuid, setregid
pause
alarm
acct

sys/prctl.h:
prctl
 
sched.h:
clone
sched_setscheduler
sched_setparam
sched_setattr
sched_getscheduler
sched_getparam
sched_getattr
sched_setaffinity
sched_getaffinity
sched_yield
sched_get_priority_max
sched_get_priority_min
sched_rr_get_interval
unshare
setns

linux/unistd.h:
set_tid_address
exit_group

sys/resource.h:
setpriority, getpriority
getrlimit setrlimit
getrusage
gettid

linux/kcmp.h:
kcmp

sys/capability.h:
capget, capset

stdlib.h:
exit
Synchronization

sys/sem.h:
semget
semctl
semtimedop
semop

mqueue.h:
mq_open
mq_unlink
mq_timedsend
mq_timedreceive
mq_notify

sys/msg.h:
msgget
msgctl
msgsnd
msgrcv

sys/wait.h:
waitid
wait4
waitpid

sys/signalfd.h:
signalfd4
signalfd

signal.h:
kill
sigtimedwait
sigaltstack
sigpending
sigprocmask
sigaction
signal
sigsuspend

Unexported:
futex
set_robust_list
get_robust_list

restart_syscall
tgkill
rt_sigqueueinfo
rt_tgsigqueueinfo

mq_getsetattr
Memory 

numaif.h:
mbind
set_mempolicy
migrate_pages
get_mempolicy

numaif.h:
move_pages

sys/mman.h:
msync
mincore
munmap
remap_file_pages
mremap
mlock, mlock2
munlockmlockall
munlockall
mprotect
pkey_mprotect
pkey_alloc
pkey_free
madvise

sys/shm.h: 

shmget, shmctl
shmat, shmdt

sys/swap.h:
swapoff, swapon

sys/memfd.h: 
memfd_create

Security

sys/fsuid.h:
setfsuid
setfsgid

keyutils.h:
add_key
request_key
keyctl

Unexported:
seccomp
Metadata

sys/stat.h:
stat

sys/statfs.h:
statfs
fstatfs

sys/inotify.h:
inotify_init1
inotify_init
inotify_add_watch
inotify_rm_watch

sys/fanotify.h:
fanotify_init
fanotify_mark

sys/xattr.h:
setxattr
lsetxattr
fsetxattr
getxattr
lgetxattr
fgetxattr
listxattr
llistxattr
flistxattr
removexattr
lremovexattr
fremovexattr

sys/quota.h:
quotactl

stdio.h:
renameat
rename

Unexported:
statx
io_getevents
io_pgetevents
fsopen
fspick
lookup_dcookie
renameat2
fsinfo
open_tree
fsmount
move_mount
pivot_root
getdents
vmsplice
name_to_handle_at
open_by_handle_at
pselect6
userfaultfd
mmap_pgoff
ioprio_set
ioprio_get
Data

fcntl.h:
open, openat
fcntl
sync_file_range
fallocate
creat
splice
tee
readahead

unistd.h:
truncate, ftruncate
faccessat, access
fchdir, chdir 
chroot
fchownat, chown
lchown, fchown
close
vhangup
pipe, pipe2
sync, syncfs
fsync, fdatasync
dup, dup2, dup3
lseek
read, write
copy_file_range

sys/uio.h:
readv, writev
preadv, pwritev
preadv2, pwritev2
process_vm_readv
process_vm_writev

sys/file.h:
flock

sys/mount.h:
mount, umount

Nonblocking IO

sys/epoll.h:
epoll_create1
epoll_create
epoll_ctl
epoll_wait
epoll_pwait

sys/select.h:
select

poll.h:
poll, ppoll

linux/aio_abi.h:
io_setup
io_destroy
io_submit
io_cancel
Network

sys/socket.h:
socket, socketpair
bind
listen
accept, accept4
connect
getsockname
getpeername
send, recv
sendto, recvfrom
setsockopt, getsockopt
shutdown
sendmsg, sendmmsg
recvmsg, recvmmsg

linux/net.h:
socketcall

sys/sendfile.h:
sendfile
unistd.h:
sethostname
gethostname
setdomainname
Obsolete:
ipc, sgetmask, ssetmask, sysfs

accept, accept4 - 接受套接字上的连接

access, faccessat - 检查用户对文件的权限

acct - 打开或关闭进程记账

add_key - 向内核的密钥管理设施添加密钥

adjtimex, ntp_adjtime - 调整内核时钟

afs_syscall, break, fattach, fdetach, ftime, getmsg, getpmsg, gtty, isastream, lock, madvise1, mpx, prof, profil, putmsg, putpmsg, security, stty, tuxcall, ulimit, vserver - 未实现的系统调用

alarm - 设置一个闹钟以传送信号

alloc_hugepages, free_hugepages - 分配或释放巨型页面

arch_prctl - 设置特定于体系结构的线程状态

bdflush - 启动、刷新或调整缓冲区脏数据刷新守护进程

bind - 将名称绑定到套接字

bpf - 对扩展的 BPF 映射或程序执行命令

brk, sbrk - 更改数据段大小

cacheflush - 刷新指令和/或数据缓存的内容

capget, capset - 设置/获取线程的权限

chdir, fchdir - 更改工作目录

chmod, fchmod, fchmodat - 更改文件的权限

chown, fchown, lchown, fchownat - 更改文件的拥有者

chroot - 更改根目录

clock_getres, clock_gettime, clock_settime - 时钟和时间函数

clock_nanosleep - 高分辨率睡眠,可指定时钟

clone, __clone2 - 创建子进程

close - 关闭文件描述符

connect - 在套接字上发起连接

copy_file_range - 从一个文件复制一段数据到另一个文件

create_module - 创建一个可加载模块条目

delete_module - 卸载内核模块

dup, dup2, dup3 - 复制文件描述符

epoll_create, epoll_create1 - 打开一个 epoll 文件描述符

epoll_ctl - epoll 文件描述符的控制接口

epoll_wait, epoll_pwait - 等待 epoll 文件描述符上的 I/O 事件

eventfd - 创建一个用于事件通知的文件描述符

execveat - 相对于目录文件描述符执行程序

execve - 执行程序

_exit, _Exit - 终止调用进程

exit_group - 退出进程中的所有线程

fallocate - 操作文件空间

fanotify_init - 创建和初始化 fanotify 组

fanotify_mark - 在文件系统对象上添加、删除或修改 fanotify 标记

fcntl - 操作文件描述符

flock - 对打开的文件应用或删除建议锁

fork - 创建子进程

fsync, fdatasync - 将文件的内存状态与存储设备同步

futex - 快速用户空间锁定

futimesat - 相对于目录文件描述符更改文件的 timestamps

getcontext, setcontext - 获取或设置用户上下文

getcpu - 确定调用线程正在运行的 CPU 和 NUMA 节点

getcwd, getwd, get_current_dir_name - 获取当前工作目录

getdents, getdents64 - 获取目录条目

getdomainname, setdomainname - 获取/设置 NIS 域名

getdtablesize - 获取文件描述符表大小

getgid, getegid - 获取组标识

getgroups, setgroups - 获取/设置辅助组 ID 列表

gethostid, sethostid - 获取或设置当前主机的唯一标识符

gethostname, sethostname - 获取/设置主机名

getitimer, setitimer - 获取或设置间隔计时器的值

get_kernel_syms - 检索导出的内核和模块符号

get_mempolicy - 检索线程的 NUMA 内存策略

getpagesize - 获取内存页面大小

getpeername - 获取连接的对等套接字的名称

getpid, getppid - 获取进程标识

getpriority, setpriority - 获取/设置程序调度优先级

getrandom - 获取一系列随机字节

getresuid, getresgid - 获取真实、有效和保存的用户/组 ID

getrlimit, setrlimit, prlimit - 获取/设置资源限制

get_robust_list, set_robust_list - 获取/设置健壮的 futex 列表

getrusage - 获取资源使用情况

getsid - 获取会话 ID

getsockname - 获取套接字名称

getsockopt, setsockopt - 获取和设置套接字上的选项

get_thread_area, set_thread_area - 为线程本地存储设置 GDT 条目

gettid - 获取线程标识

gettimeofday, settimeofday - 获取/设置时间

getuid, geteuid - 获取用户标识

getunwind - 将展开数据复制到调用者的缓冲区

idle - 使进程 0 处于空闲状态

init_module, finit_module - 加载内核模块

inotify_add_watch - 向已初始化的 inotify 实例添加监视

inotify_init, inotify_init1 - 初始化 inotify 实例

inotify_rm_watch - 从 inotify 实例中删除现有监视

intro - 系统调用的介绍

io_cancel - 取消正在进行的异步 I/O 操作

ioctl_console - 控制台终端和虚拟控制台的 ioctl

ioctl - 控制设备

ioctl_fat - 操作 FAT 文件系统

ioctl_ficlonerange, ioctl_ficlone - 与另一个文件共享部分数据

ioctl_fideduperange - 与另一个文件共享部分数据

ioctl_getfsmap - 检索文件系统的物理布局

ioctl_iflags - 用于 inode 标记的 ioctl() 操作

ioctl_list - Linux/i386 内核中 ioctl 调用的列表

ioctl_ns - 用于 Linux 命名空间的 ioctl() 操作

ioctl_tty - 用于终端和串行线路的 ioctl

ioctl_userfaultfd - 创建一个用于处理用户空间中的页面错误的文件描述符

io_destroy - 销毁异步 I/O 上下文

io_getevents - 从完成队列中读取异步 I/O 事件

ioperm - 设置端口输入/输出权限

iopl - 更改 I/O 权限级别

ioprio_get, ioprio_set - 获取/设置 I/O 调度类别和优先级

io_setup - 创建异步 I/O 上下文

io_submit - 提交异步 I/O 块以供处理

ipc - System V IPC 系统调用

kcmp - 比较两个进程以确定它们是否共享内核资源

kexec_load, kexec_file_load - 加载一个新的内核以供稍后执行

keyctl - 操作内核的密钥管理设施

killpg - 向进程组发送信号

kill - 向进程发送信号

link, linkat - 为文件创建新名称

listen - 在套接字上监听连接

_llseek - 重置读/写文件偏移量

lookup_dcookie - 返回目录项的路径

lseek - 重置读/写文件偏移量

madvise - 提供有关内存使用的建议

mbind - 为内存范围设置内存策略

membarrier - 在一组线程上发出内存屏障

memfd_create - 创建匿名文件

migrate_pages - 将进程中的所有页面移动到另一组节点

mincore - 确定页面是否驻留在内存中

mkdir, mkdirat - 创建目录

mknod, mknodat - 创建特殊文件或普通文件

mlock, mlock2, munlock, mlockall, munlockall - 锁定和解锁内存

mmap2 - 将文件或设备映射到内存

mmap, munmap - 将文件或设备映射或解除映射到内存

modify_ldt - 获取或设置每个进程的 LDT 项

mount - 挂载文件系统

move_pages - 将进程的单个页面移动到另一个节点

mprotect, pkey_mprotect - 设置内存区域的保护

mq_getsetattr - 获取/设置消息队列属性

mq_notify - 注册消息可用时的通知

mq_open - 打开消息队列

mq_receive, mq_timedreceive - 从消息队列接收消息

mq_send, mq_timedsend - 将消息发送到消息队列

mq_unlink - 删除消息队列

mremap - 重新映射虚拟内存地址

msgctl - System V 消息控制操作

msgget - 获取 System V 消息队列标识符

msgrcv, msgsnd - System V 消息队列操作

msync - 将文件与内存映射同步

name_to_handle_at, open_by_handle_at - 获取路径名的句柄并通过句柄打开文件

nanosleep - 高分辨率睡眠

nfsservctl - 对内核 nfs 守护程序的系统调用接口

nice - 更改进程优先级

open, openat, creat - 打开并可能创建文件

outb, outw, outl, outsb, outsw, outsl, inb, inw, inl, insb, insw, insl, outb_p, outw_p, outl_p, inb_p, inw_p, inl_p - 端口 I/O

pause - 等待信号

pciconfig_read, pciconfig_write, pciconfig_iobase - pci 设备信息处理

perf_event_open - 设置性能监控

perfmonctl - IA-64 性能监控单元的接口

personality - 设置进程执行域

pipe, pipe2 - 创建管道

pivot_root - 更改根文件系统

pkey_alloc, pkey_free - 分配或释放保护密钥

poll, ppoll - 等待文件描述符上的某些事件

posix_fadvise - 预先声明文件数据的访问模式

prctl - 对进程的操作

pread, pwrite - 从给定偏移量读取或写入文件描述符

process_vm_readv, process_vm_writev - 在进程地址空间之间传输数据

ptrace - 进程跟踪

query_module - 查询内核以获取有关模块的各种信息

quotactl - 操作磁盘配额

readahead - 将文件预读到页面缓存

readdir - 读取目录项

readlink, readlinkat - 读取符号链接的值

read - 从文件描述符读取

readv, writev, preadv, pwritev, preadv2, pwritev2 - 将数据读入或写入多个缓冲区

reboot - 重启或启用/禁用 Ctrl-Alt-Del

recvmmsg - 在套接字上接收多条消息

recv, recvfrom, recvmsg - 从套接字接收消息

remap_file_pages - 创建非线性文件映射

rename, renameat, renameat2 - 更改文件的名称或位置

request_key - 从内核密钥管理工具请求密钥

restart_syscall - 在被停止信号中断后重启系统调用

rmdir - 删除目录

rt_sigqueueinfo, rt_tgsigqueueinfo - 排队信号和数据

s390_pci_mmio_write, s390_pci_mmio_read - 将数据传输到/从 PCI MMIO 内存页面

s390_runtime_instr - 启用/禁用 s390 CPU 运行时检测

s390_sthyi - 模拟 STHYI 指令

sched_get_priority_max, sched_get_priority_min - 获取静态优先级范围

sched_rr_get_interval - 获取命名进程的 SCHED_RR 间隔

sched_setaffinity, sched_getaffinity - 设置和获取线程的 CPU 亲和力掩码

sched_setattr, sched_getattr - 设置和获取调度策略和属性

sched_setparam, sched_getparam - 设置和获取调度参数

sched_setscheduler, sched_getscheduler - 设置和获取调度策略/参数

sched_yield - 让出处理器

seccomp - 操作进程的安全计算状态

select, pselect, FD_CLR, FD_ISSET, FD_SET, FD_ZERO - 同步 I/O 多路复用

semctl - System V 信号量控制操作

semget - 获取 System V 信号量集标识符

semop, semtimedop - System V 信号量操作

sendfile - 在文件描述符之间传输数据

sendmmsg - 在套接字上发送多条消息

send, sendto, sendmsg - 在套接字上发送消息

seteuid, setegid - 设置有效用户或组 ID

setfsgid - 设置用于文件系统检查的组标识

setfsuid - 设置用于文件系统检查的用户标识

setgid - 设置组标识

set_mempolicy - 为线程及其子线程设置默认 NUMA 内存策略

setns - 将线程重新关联到命名空间

setpgid, getpgid, setpgrp, getpgrp - 设置/获取进程组

setresuid, setresgid - 设置真实、有效和保存的用户或组 ID

setreuid, setregid - 设置真实和/或有效用户或组 ID

setsid - 创建会话并设置进程组 ID

set_tid_address - 设置指向线程 ID 的指针

setuid - 设置用户标识

setup - 设置设备和文件系统,挂载根文件系统

sgetmask, ssetmask - 操作信号掩码(已过时)

shmat, shmdt - System V 共享内存操作

shmctl - System V 共享内存控制

shmget - 分配 System V 共享内存段

shutdown - 关闭全双工连接的一部分

sigaction, rt_sigaction - 检查和更改信号操作

sigaltstack - 设置和/或获取信号堆栈上下文

signal - ANSI C 信号处理

signalfd - 为接受信号创建文件描述符

sigpending, rt_sigpending - 检查挂起的信号

sigprocmask, rt_sigprocmask - 检查和更改阻塞信号

sigqueue - 将信号和数据排队到进程

sigreturn, rt_sigreturn - 从信号处理程序返回并清理堆栈帧

sigsuspend, rt_sigsuspend - 等待信号

sigwaitinfo, sigtimedwait, rt_sigtimedwait - 同步等待排队的信号

socketcall - 套接字系统调用

socket - 创建通信端点

socketpair - 创建一对连接的套接字

splice - 将数据拼接进/出管道

spu_create - 创建新的 spu 上下文

spu_run - 执行 SPU 上下文

statfs, fstatfs - 获取文件系统统计信息

stat, fstat, lstat, fstatat - 获取文件状态

statvfs, fstatvfs - 获取文件系统统计信息

statx - 获取文件状态(扩展)

stime - 设置时间

subpage_prot - 为地址范围定义子页面保护

swapon, swapoff - 启动/停止将文件/设备交换到内存

symlink, symlinkat - 为文件创建新名称

sync_file_range - 将文件段与磁盘同步

sync, syncfs - 将文件系统缓存提交到磁盘

syscall - 间接系统调用

_syscall - 在没有库支持的情况下调用系统调用(已过时)

syscalls - Linux 系统调用

sysctl - 读取/写入系统参数

sysfs - 获取文件系统类型信息

sysinfo - 返回系统信息

syslog, klogctl - 读取和/或清除内核消息环形缓冲区;设置 console_loglevel

tee - 复制管道内容

time - 获取以秒为单位的时间

timer_create - 创建 POSIX 每个进程计时器

timer_delete - 删除 POSIX 每个进程计时器

timerfd_create, timerfd_settime, timerfd_gettime - 通过文件描述符通知的计时器

timer_getoverrun - 获取 POSIX 每个进程计时器的超运行计数

timer_settime, timer_gettime - 激活/停用并获取 POSIX 每个进程计时器的状态

times - 获取进程时间

tkill, tgkill - 向线程发送信号

truncate, ftruncate - 将文件截断到指定长度

umask - 设置文件模式创建掩码

umount, umount2 - 卸载文件系统

uname - 获取当前内核的名称和信息

unlink, unlinkat - 删除名称以及可能引用的文件

unshare - 与进程执行上下文的一部分分离

uselib - 加载共享库

userfaultfd - 创建文件描述符以在用户空间处理页面错误

ustat - 获取文件系统统计信息

utimensat, futimens - 以纳秒精度更改文件时间戳

utime, utimes - 更改文件的最后访问和修改时间

vfork - 创建子进程并阻塞父进程

vhangup - 虚拟挂起当前终端

vm86old, vm86 - 进入虚拟 8086 模式

vmsplice - 将用户页面拼接入管道

wait3, wait4 - 等待进程状态改变,BSD 风格

wait, waitpid, waitid - 等待进程状态改变

write - 写入文件描述符

华夏公益教科书