我见过这个例子:
#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;
}
我有两个问题:
答案 0 :(得分:0)
为什么需要使用系统调用来查找两个数字之间的差异? - 我不知道你在哪里看到过这段代码,但你当然可以用一个简单的减去来计算多少时间过去。
为什么我们需要系统调用? - 因为1982年的处理器使用了一种称为“保护模式”的东西,这意味着CPU是硬连线的,可以让你有限地访问东西,同时它在保护模式下运行。因此,每次您想要使用硬件(打印到屏幕,写入文件,通过网卡发送内容等)时,您都无法在保护模式下执行此操作。因此,您使用系统调用来请求内核为您执行此操作(内核不以受保护模式运行),内核可能会执行此操作,可能会报告问题或只是告诉您没有权限。因此,简而言之:您需要系统调用才能执行特殊操作,例如使用硬件。