转自:
以下是Linux系统调用的一个列表,包含了大部分常用系统调用和由系统调用派生出的的函数。这可能是你在互联网上所能看到的唯一一篇中文注释的Linux系统调用列表,即使是简单的字母序英文列表,能做到这么完全也是很罕见的。
按照惯例,这个列表以man pages第2节,即系统调用节为蓝本。按照笔者的理解,对其作了大致的分类,同时也作了一些小小的修改,删去了几个仅供内核使用,不允许用户调用的系统调用,对个别本人稍觉不妥的地方作了一些小的修改,并对所有列出的系统调用附上简要注释。
其中有一些函数的作用完全相同,只是参数不同。(可能很多熟悉C++朋友马上就能联想起函数重载,但是别忘了Linux核心是用C语言写的,所以只能取成不同的函数名)。还有一些函数已经过时,被新的更好的函数所代替了(gcc在链接这些函数时会发出警告),但因为兼容的原因还保留着,这些函数我会在前面标上“*”号以示区别。
一、进程控制: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 参见waitwaitpid 等待指定子进程终止wait4 参见waitpidcapget 获取进程权限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 参见truncateumask 设置文件权限掩码fsync 把文件在内存中的部分写回磁盘2、文件系统操作access 确定文件的可存取性chdir 改变当前工作目录fchdir 参见chdirchmod 改变文件方式fchmod 参见chmodchown 改变文件的属主或用户组fchown 参见chownlchown 参见chownchroot 改变根目录stat 取文件状态信息lstat 参见statfstat 参见statstatfs 取文件系统信息fstatfs 参见statfsreaddir 读取目录项getdents 读取目录项mkdir 创建目录mknod 创建索引节点rmdir 删除目录rename 文件改名link 创建链接symlink 创建符号链接unlink 删除链接readlink 读符号链接的值mount 安装文件系统umount 卸下文件系统ustat 取文件系统信息utime 改变文件的访问修改时间utimes 参见utimequotactl 控制磁盘配额回页首三、系统控制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 参见brkmlock 内存页面加锁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 参见sendrecv 通过socket接收信息recvfrom 接收UDP信息recvmsg 参见recvlisten 监听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而设的信号处理函数,作用类似sigactionssetmask ANSI C的信号处理函数,作用类似sigaction2、消息msgctl 消息控制操作msgget 获取消息队列msgsnd 发消息msgrcv 取消息3、管道pipe 创建管道4、信号量semctl 信号量控制semget 获取一组信号量semop 信号量操作5、共享内存shmctl 控制共享内存shmget 获取共享内存shmat 连接共享内存shmdt 拆卸共享内存
参考资料
- Linux man pages
- Advanced Programming in the UNIX Environment, W. Richard Stevens, 1993