您的位置:首页 > 运维架构 > Linux

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

2017-02-16 19:26 183 查看

系统调用

与内核通信

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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 函数 内核