0x00 前言
本文汇总下开发过程中收集的一些 Linux 系统调用及用法
0x01 常用系统调用分类
进程控制
fork
:创建一个新进程clone
:按指定条件创建子进程execve
:运行可执行文件exit
:中止进程_exit
:立即中止当前进程getdtablesize
:进程所能打开的最大文件数getpgid
:获取指定进程组标识号setpgid
:设置指定进程组标志号getpgrp
:获取当前进程组标识号setpgrp
:设置当前进程组标志号getpid
:获取进程标识号getppid
:获取父进程标识号getpriority
:获取调度优先级setpriority
:设置调度优先级modify_ldt
:读写进程的本地描述表nanosleep
:使进程睡眠指定的时间nice
:改变分时进程的优先级pause
:挂起进程,等待信号personality
:设置进程运行域prctl
:对进程进行特定操作ptrace
:进程跟踪sched_get_priority_max
:取得静态优先级的上限sched_get_priority_min
:取得静态优先级的下限sched_getparam
:取得进程的调度参数sched_getscheduler
:取得指定进程的调度策略sched_rr_get_interval
:取得按 RR 算法调度的实时进程的时间片长度sched_setparam
:设置进程的调度参数sched_setscheduler
:设置指定进程的调度策略和参数sched_yield
:进程主动让出处理器, 并将自己等候调度队列队尾vfork
:创建一个子进程,以供执行新程序,常与execve
等同时使用wait
:等待子进程终止wait3
:参见wait
waitpid
:等待指定子进程终止wait4
:参见waitpid
capget
:获取进程权限capset
:设置进程权限getsid
:获取会晤标识号setsid
:设置会晤标识号
文件系统控制
1、文件读写操作
fcntl
:文件控制open
:打开文件creat
:创建新文件close
:关闭文件描述字read
:读文件write
:写文件readv
:从文件读入数据到缓冲数组中writev
:将缓冲数组里的数据写入文件pread
:对文件随机读pwrite
:对文件随机写lseek
:移动文件指针_llseek
:在64
位地址空间里移动文件指针dup
:复制已打开的文件描述字dup2
:按指定条件复制文件描述字flock
:文件加 / 解锁poll
:I/O 多路转换truncate
:截断文件ftruncate
:参见truncate
umask
:设置文件权限掩码fsync
:把文件在内存中的部分写回磁盘
2、文件系统操作
access
:确定文件的可存取性chdir
:改变当前工作目录fchdir
:参见chdir
chmod
:改变文件方式fchmod
:参见chmod
chown
:改变文件的属主或用户组fchown
:参见chown
lchown
:参见chown
chroot
:改变根目录stat
:取文件状态信息lstat
:参见stat
fstat
:参见stat
statfs
:取文件系统信息fstatfs
:参见statfs
readdir
:读取目录项getdents
:读取目录项mkdir
:创建目录mknod
:创建索引节点rmdir
:删除目录rename
:文件改名link
:创建链接symlink
:创建符号链接unlink
:删除链接readlink
:读符号链接的值mount
:安装文件系统umount
:卸下文件系统ustat
:取文件系统信息utime
:改变文件的访问修改时间utimes
:参见utime
quotactl
:控制磁盘配额
系统控制
ioctl
:I/O 总控制函数_sysctl
:读 / 写系统参数acct
:启用或禁止进程记账getrlimit
:获取系统资源上限setrlimit
:设置系统资源上限getrusage
:获取系统资源使用情况uselib
:选择要使用的二进制函数库ioperm
:设置端口 I/O 权限iopl
:改变进程 I/O 权限级别outb
:低级端口操作reboot
:重新启动swapon
:打开交换文件和设备swapoff
:关闭交换文件和设备bdflush
:控制bdflush
守护进程sysfs
:取核心支持的文件系统类型sysinfo
: 取得系统信息adjtimex
: 调整系统时钟alarm
: 设置进程的闹钟getitimer
: 获取计时器值setitimer
: 设置计时器值gettimeofday
: 取时间和时区settimeofday
: 设置时间和时区stime
: 设置系统日期和时间time
: 取得系统时间times
: 取进程运行时间uname
: 获取当前 UNIX 系统的名称、版本和主机等信息vhangup
: 挂起当前终端nfsservctl
: 对 NFS 守护进程进行控制vm86
: 进入模拟 8086 模式create_module
: 创建可装载的模块项delete_module
: 删除可装载的模块项init_module
: 初始化模块query_module
: 查询模块信息get_kernel_syms
: 取得核心符号, 已被query_module
代替
内存管理
brk
: 改变数据段空间的分配sbrk
: 参见brk
mlock
: 内存页面加锁munlock
: 内存页面解锁mlockall
: 调用进程所有内存页面加锁munlockall
: 调用进程所有内存页面解锁mmap
: 映射虚拟内存页munmap
: 去除内存页映射mremap
: 重新映射虚拟内存地址msync
: 将映射内存中的数据写回磁盘mprotect
: 设置内存映像保护getpagesize
: 获取页面大小sync
: 将内存缓冲区数据写回硬盘cacheflush
: 将指定缓冲区中的内容写回磁盘
网络管理
getdomainname
: 取域名setdomainname
: 设置域名gethostid
: 获取主机标识号sethostid
: 设置主机标识号gethostname
: 获取本主机名称sethostname
: 设置主机名称
socket 控制
socketcall
: socket 系统调用socket
: 建立 socketbind
: 绑定 socket 到端口connect
: 连接远程主机accept
: 响应 socket 连接请求send
: 通过 socket 发送信息sendto
: 发送 UDP 信息sendmsg
: 参见send
recv
: 通过 socket 接收信息recvfrom
: 接收 UDP 信息recvmsg
: 参见recv
listen
: 监听 socket 端口select
: 对多路同步 I/O 进行轮询shutdown
: 关闭 socket 上的连接getsockname
: 取得本地 socket 名字getpeername
: 获取通信对方的 socket 名字getsockopt
: 取端口设置setsockopt
: 设置端口参数sendfile
: 在文件或端口间传输数据socketpair
: 创建一对已联接的无名 socket
用户管理
getuid
: 获取用户标识号setuid
: 设置用户标志号getgid
: 获取组标识号setgid
: 设置组标志号getegid
: 获取有效组标识号setegid
: 设置有效组标识号geteuid
: 获取有效用户标识号seteuid
: 设置有效用户标识号setregid
: 分别设置真实和有效的的组标识号setreuid
: 分别设置真实和有效的用户标识号getresgid
: 分别获取真实的, 有效的和保存过的组标识号setresgid
: 分别设置真实的, 有效的和保存过的组标识号getresuid
: 分别获取真实的, 有效的和保存过的用户标识号setresuid
: 分别设置真实的, 有效的和保存过的用户标识号setfsgid
: 设置文件系统检查时使用的组标识号setfsuid
: 设置文件系统检查时使用的用户标识号getgroups
: 获取后补组标志清单setgroups
: 设置后补组标志清单
进程间通信
ipc
: 进程间通信总控制调用
1、信号
sigaction
: 设置对指定信号的处理方法sigprocmask
: 根据参数对信号集中的信号执行阻塞 / 解除阻塞等操作sigpending
: 为指定的被阻塞信号设置队列sigsuspend
: 挂起进程等待特定信号signal
: 参见 signalkill
: 向进程或进程组发信号*sigblock
: 向被阻塞信号掩码中添加信号, 已被sigprocmask
代替*siggetmask
: 取得现有阻塞信号掩码, 已被sigprocmask
代替*sigsetmask
: 用给定信号掩码替换现有阻塞信号掩码, 已被sigprocmask
代替*sigmask
: 将给定的信号转化为掩码, 已被sigprocmask
代替*sigpause
: 作用同sigsuspend
, 已被sigsuspend
代替sigvec
: 为兼容 BSD 而设的信号处理函数, 作用类似sigaction
ssetmask
: ANSI C 的信号处理函数, 作用类似sigaction
2、消息
msgctl
: 消息控制操作msgget
: 获取消息队列msgsnd
: 发消息msgrcv
: 取消息
3、管道
pipe
: 创建管道
4、信号量
semctl
: 信号量控制semget
: 获取一组信号量semop
: 信号量操作
5、共享内存
shmctl
:控制共享内存shmget
:获取共享内存shmat
:连接共享内存shmdt
:拆卸共享内存