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

如何调用自行设计的系统调用
作者: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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值