syscalls.h 与unitsd.h
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)。其结果是您可以使用它们的名字来调用内核函数,就像其他任何系统调用一样。
浙公网安备 33010602011771号