syscalls.h 与unitsd.h
2016-01-19 16:02
399 查看
1 unitsd.h :1)定义了系统调用原型:eg read(),write()....
2)定义了系统调用宏 :eg _syscall2( ret-type, func-name, arg1-type, arg1-name, arg2-type, arg2-name )
3) 定义了系统调用号:eg #define __NR_getjiffies 320
2 syscall.h: 1) 定义了间接系统调用函数syscall()原型(可以 用man syscall 查看该函数具体用法)
2)
注意
2)定义了系统调用宏 :eg _syscall2( ret-type, func-name, arg1-type, arg1-name, arg2-type, arg2-name )
3) 定义了系统调用号:eg #define __NR_getjiffies 320
2 syscall.h: 1) 定义了间接系统调用函数syscall()原型(可以 用man syscall 查看该函数具体用法)
2)
SYS_符号常量:大部分系统调用都包括了一个
SYS_符号常量来指定自己到
__NR_索引的映射。例如,使用
syscall调用
__NR_getpid索引:syscall( SYS_getpid )
#include <stdio.h> #include <linux/unistd.h> #include <sys/syscall.h> #define __NR_getjiffies 320 #define __NR_diffjiffies 321 #define __NR_pdiffjiffies 322 _syscall0( long, getjiffies ); _syscall1( long, diffjiffies, long, ujiffies ); _syscall2( long, pdiffjiffies, long, ujiffies, long*, presult ); int main() { long jifs, result; int err; jifs = getjiffies(); printf( "difference is %lx\n", diffjiffies(jifs) ); err = pdiffjiffies( jifs, &result ); if (!err) { printf( "difference is %lx\n", result ); } else { printf( "error\n" ); } return 0; }
注意
__NR索引在这个应用程序中是必需的,因为
_syscall宏使用了
func-name来构造
__NR索引(
getjiffies->
__NR_getjiffies)。其结果是您可以使用它们的名字来调用内核函数,就像其他任何系统调用一样。
相关文章推荐
- PHP的错误和异常处理
- 数据库迁移 - SQLServer->MySQL
- 需求 - 16 - 倒计时
- 【bzoj2705】[SDOI2012]Longge的问题 欧拉函数
- Unity 3D中的 SetActive() 与 OnEnable()、OnDisable()要注意的
- model1和model2
- 监控 DNS 流量,预防安全隐患五大招!
- Android图片加载神器之Fresco-加载图片基础[详细图解Fresco的使用]
- poj 1308 Is It A Tree?(并查集)
- Swift学习之闭包
- IT增值服务,客户案例(一)--山东青岛在职人士,2年.Net经验,转Java开发半年
- JS拖拽组件学习使用
- php 全局变量global的作用域
- nfs常见问题解决方法
- Zabbix实现微信告警
- Redis简介
- leetCode power of two
- python 多线程的通俗易懂的博客
- linux Kernel module简单模拟ps指令输出
- 【转】IOS基础:深入理解Objective-c中@class的含义