如何調用自行設計的系統調用, --核心開發入門(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)"中的程序完成並編譯核心且重新啓動後,把本文件編譯後就可運行了.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章