linux系统调用书写
来源:互联网 发布:js 金币掉落效果 编辑:程序博客网 时间:2024/05/29 12:01
操作环境
系统版本:Ubuntu12.04.5 内核版本:Linux3.3.8
何为系统调用
它是内核层暴露给用户层的一组接口但与应用接口API的存在一定的区别 应用接口API仅仅为一组函数声明而系统调用则是通过软中断向内核发出请求
系统调用的组成
系统调用名的声明
在linux-3.3.8/arch/x86/syscalls/目录下x86 : 根据你的处理器选择目录进入 我的处理器为x86的 所以进入此目录有五个文件 选择我们需要的说 syscall_64.tbl 如果是32位操作系统,打开syscall_32.tbl以下为文件内容系统调用号 处理器类型 用户层函数名 内核层函数名如: 0 64 read sys_read内核版本不同系统调用的数量也会有些许的差异本机系统调用一共有312个(0 ~ 311)
系统调用的声明
在linux-3.3.8/include/linux/目录下打开syscalls.h的头文件文件内容为内核数据结构的声明和系统调用的声明还有宏函数的实现我们在#endif的上面添加自己的系统调用的声明如: asmlinkage long sys_test(int number)
实现系统调用
在linux-3.3.8/的目录下创建一个文件夹test/ 在文件夹内部创建test.c 和 Makefile文件 在test.c里实现我们的系统调用
#include <kernel.h>//test.c asmlinkage long sys_test(int number) { printk(KERN_ERR"called sys_test %d",number); return 0; }
在当前文件夹下的Makefle文件中添加如下内容
obj-y := test.o
在等号之后以.o的形式写你需要的.c文件 返回linux-3.3.8/目录后修改此文件夹下的Makefile文件
core-y := usr/ test/
在core后添加你在linux-3.3.8/目录下添加的目录 修改完毕后进行编译即完成自己的系统调用书写
使用系统调用
在应用层调用系统调用
前面我们已经在内核层实现了我们的系统调用接着我们就要在应用层来调用它下面为系统调用的接口
syscall(n,perm1,perm2);
n为我们在syscall_64.tbl中的系统调用号,之后为系统调用的参数表
编写函数来调用syscall
#include <stdio.h>#include <sys/syscall.h>int main(void){ int rc = 0,number = 5; rc = syscall(312,number); return rc;}
0 0
- linux系统调用书写
- 汇编语言调用Linux系统调用
- 如何调用linux系统调用
- Linux系统调用列表
- Linux 系统调用
- Linux系统调用列表
- Linux系统调用列表
- Linux系统调用列表
- Linux系统调用列表
- linux的系统调用
- Linux系统调用列表
- Linux系统调用列表
- Linux系统调用列表
- Linux系统调用讲义
- Linux系统调用列表
- linux 系统调用
- Linux系统调用
- Linux系统调用列表
- Angular $scope和$rootScope事件机制之$emit、$broadcast和$on
- IO大串烧!!绝对经典.值得收藏!!
- mongodb集合对应的文件
- 彻底理解代理模式
- python数据结构学习笔记-2016-11-26-02-树结构
- linux系统调用书写
- 20.子查询,连接
- Spring官方文档翻译
- 操作系统之进程三部曲
- 原理图---继电器
- 用jQuery写的第一个程序,用到了append函数,是一次web上机作用
- VIM 基本技能
- Bzoj 4726
- 看过这样的代码吗? 大部分人绝对看不懂!