您的位置:首页 > 其它

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)
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
)。其结果是您可以使用它们的名字来调用内核函数,就像其他任何系统调用一样。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: