
Lniu系统调用列表.docx
21页Linux下的系统调用也是通过中断(int 0x80)来实现的在执行int 80指令时,寄存器eax中存放的是 系统调用的功能号,而传给系统调用的参数则必须按顺序放到寄存器ebx,ecx,edx,esi,edi中,当系 统调用完成之后,返回值可以在寄存器eax中获得所有的系统调用功能号都可以在文件/usr/include/bits/syscall.h中找到,为了便于使用,它们是用 SYS_
系统调用完成之后,返回值仍将保存在寄存器eax中由于只是需要一块连续的内存区域来保存系统调用的参数,因此完全可以像普通的函数调用一样使用栈 (stack)来传递系统调用所需的参数但要注意一点,Linux采用的是C语言的调用模式,这就意味着所有 参数必须以相反的顺序进栈,即最后一个参数先入栈,而第一个参数则最后入栈如果采用栈来传递系统 调用所需的参数,在执行int 0x80指令时还应该将栈指针的当前值复制到寄存器ebx中以下是Linux系统调用的一个列表,包含了大部分常用系统调用和由系统调用派 生出的的函数这可能是你在互联网上所能看到的唯 篇中文注释的Linux系统调用列表,即使是简单的字母序英文列表,能做到这么完全也是很罕见的按照惯例,这个列表以man pages第2节,即系统调用节为蓝本按照笔者的理 解,对其作了大致的分类,同时也作了一些小小的修改,删去了几个仅供内核使 用,不允许用户调用的系统调用,对个别本人稍觉不妥的地方作了一些小的修改, 并对所有列出的系统调用附上简要注释其中有一些函数的作用完全相同,只是参数不同可能很多熟悉C++朋友马上 就能联想起函数重载,但是别忘了 Linux核心是用C语言写的,所以只能取成不 同的函数名)。
还有一些函数已经过时,被新的更好的函数所代替了(gcc在链 接这些函数时会发出警告),但因为兼容的原因还保留着,这些函数我会在前面 标上“*”号以示区别一、进程控制:fork创建一个新进程clone按指定条件创建子进程execve运行可执行文件exi t中止进程exit立即中止当前进程getdtablesize进程所能打开的最大文件数getpgid获取指定进程组标识号setpgid设置指定进程组标志号getpgrp获取当前进程组标识号setpgrp设置当前进程组标志号getpid获取进程标识号getppid获取父进程标识号getpriority获取调度优先级setpriority设置调度优先级modify_ldt读写进程的本地描述表nanosleep使进程睡眠指定的时间nice改变分时进程的优先级pause挂起进程,等待信号personality设置进程运行域prc tl对进程进行特定操作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 等同时使用wai t等待子进程终止wait3参见waitwaitpid等待指定子进程终止wait4参见 waitpidcapget获取进程权限capset设置进程权限getsid获取会晤标识号setsid设置会晤标识号回页首二、文件系统控制1、文件读写操作fcntl文件控制open打开文件crea t创建新文件close关闭文件描述字read读文件wri te写文件readv从文件读入数据到缓冲数组中writev将缓冲数组里的数据写入文件pread对文件随机读pwrite对文件随机写lseek移动文件指针llseek在64位地址空间里移动文件指针dup复制已打开的文件描述字dup2按指定条件复制文件描述字flock文件加/解锁pollI/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读符号链接的值mou nt安装文件系统umount卸下文件系统ustat取文件系统信息utime改变文件的访问修改时间utimes参见utimequotactl控制磁盘配额三、系统控制ioc tlI/O总控制函数_sysctl读/写系统参数acc t启用或禁止进程记账getrlimit获取系统资源上限setrlimit设置系统资源上限1getrusage获取系统资源使用情况1uselib选择要使用的一进制函数库1ioperm设置端口 I/O权限iiopl改变进程I/O权限级别1outb低级端口操作1reboot重新启动1swapon打开父换文件和设备iswapoff关闭父换文件和设备1bdflush控制bdflush守护进程1sysfs取核心支持的文件系统类型1sysinfo取得系统信息1adjtimex调整系统时钟1alarm设置进程的闹钟1getitimer获取计时器值1setitimer设置计时器值1gettimeofday取时间和时区1settimeofday设置时间和时区1st ime设置系统日期和时间1time取得系统时间1t imes取进程运行时间1uname获取当前UNIX系统的名称、版本和主机等信息ivhangup挂起当前终端1nfsservctl对NFS守护进程进行控制vm86进入模拟8086模式1create_module创建可装载的模块项1delete_module删除可装载的模块项1init_module初始化模块1query_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控制socketcallsocket系统调用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分别设置真实和有效的用户。












