CSDN博客

img bmsdr

如何调用自行设计的系统调用, --核心开发入门(3)

发表于2004/10/2 19:23:00  688人阅读

分类: 【C Programming】 【OpenBSD】

如何调用自行设计的系统调用
作者:xie_minix
/*这段程序就越加简单了.只要懂得C语言和看过"入门(2)"的网友都能很快理解*/
#include <sys/types.h>
#include <sys/param.h>
#include <sys/syscall.h> /*要用到的syscall函数在此头文件中申明了.*/
#include <unistd.h>
#include <stdio.h>
#include <sys/socket.h> /*编译时if.h中的一些变量要用到此头文件*/
#include <net/if.h> /*接口定义头文件,我们的ifnet结构在此头文件中定义了.*/

int main(int argc,char **argv)
{
int err;
u_short dnum=1;
struct ifnet myifnet;
do {
err=syscall(286,dnum,&myifnet);/*参数286是系统调用号,dnum是设备号,这里是1,也就是说我们的例子中只对网络设备1进行统计.myifnet是调用后传回的数据放在此结构中.*/
if (err==0)
{
printf("设备%d =>%s",dnum,myifnet.if_xname);
printf(" 类型:%d 最大传输单元(mtu):%d 波特率:%d 接收包:%d 发送包:%d 接收包错误数:%d 发送包错误数:%d/n",myifnet.if_type,myifnet.if_mtu,myifnet.if_baudrate,myifnet.if_ipackets,myifnet.if_opackets,myifnet.if_ierrors,myifnet.if_oerrors);
/*ifnet结构中的信息丰富着呢,想要什么就拿什么.如果ifnet中没有.可以在"核心开发入门(2)中设计一些全局变量.来统计或控制你想做的."*/
}
sleep(1);/*每秒钟输出一次*/
} while (err==0);
}
/*整个调用过程非常简单,但要注意的是:申明myifnet时,不能采用以下申请方法:
struct ifnet *myifnet;
因为这样就没有分配内存给ifnet结构,而是给了一个指针,而且指针是没有初值的,进行系统调用时syscall(286,dnum,myifnet)的myifnet
由于没有初始值而会导致调用失败.
同样该程序在"入门(2)"中的程序完成并编译核心且重新启动后,把本文件编译后就可运行了.
阅读全文
0 0

相关文章推荐

img
取 消
img