【Linux】系统调用

什么是系统调用

  进程的内存空间分为用户空间和内核空间两部分,内核空间运行在特权级,用户空间运行在非特权级,并且用户空间是不能直接访问内核空间的。为此,内核向用户空间提供了有限制的访问,即系统调用。
  由于系统调用是偏底层的,不同平台提供的系统调用不同,为了屏蔽系统调用的各种细节,增加通用性和跨平台性,系统又向用户进程提供了API,用户进程可以通过API来访问系统调用。

如何查看系统列表

同架构不同位数的系统,系统调用编号是不一样的。如果用户空间传递的系统调用编号和内核里的系统调用编号对不上,那问题就严重了。Linux内核在编译时会生成一个文件,arch/x86/include/generated/uapi/asm/unistd_64.h,这个文件是生成的,不是本来就有的,这个文件里面有所有系统调用的编号。在安装操作系统时或者单独安装内核和内核头文件时,这个文件会被安装在**/usr/include/asm/unistd_64.h**,libc会使用这个文件,这样用户空间传递的编号和内核里面的系统调用编号就是一致的了。

#ifndef _ASM_X86_UNISTD_64_H
#define _ASM_X86_UNISTD_64_H 1

#define __NR_read 0
#define __NR_write 1
#define __NR_open 2
#define __NR_close 3
#define __NR_stat 4
#define __NR_fstat 5
#define __NR_lstat 6
#define __NR_poll 7
#define __NR_lseek 8
#define __NR_mmap 9
#define __NR_mprotect 10
#define __NR_munmap 11
#define __NR_brk 12
#define __NR_rt_sigaction 13
#define __NR_rt_sigprocmask 14
#define __NR_rt_sigreturn 15
#define __NR_ioctl 16
#define __NR_pread64 17
...

参考链接:

  1. 深入理解Linux系统调用与API
  2. Linux 系统调用过程
  3. Linux-C中libc函数以及系统调用函数查看
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值