linux学习笔记(四)系统调用

系统调用

与内核通信

POSIX : IEEE标准
C库:
系统调用:系统内核层面使用,应用层需要syscall

系统调用

asmlinkage 限定词 通知编译器仅从栈中提取该函数参数

系统调用号

系统通过调用号来进行系统调用,在编译的时候已经确定
系统调用表,例如x86-64就在 arch/i386/kernel/syscall_64.c

系统调用处理

应用程序通过软中断方式通知内核,通过一个异常导致系统切换到内核

实现系统调用

参数验证

指针必须保证:
内存区域属于用户空间
在进程的地址空间里
读写可执行等权限要说明
使用copy_to_user() 和copy_from_user()来进行内核用户层交换数据,它们的参数类似memcpy
使用capable() 来判断是否有权限,

系统调用注册

用户空间访问系统调用

_syscalln() n为0~6,代表需要传递的参数个数
例如open 进行系统调用: _syscall3(long,open,const char*,filename,int,flags,int,mode);原型:long open(const char* filename,int flags,int mode);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值