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

原创 2004年10月02日 19:23:00
如何调用自行设计的系统调用
作者: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)"中的程序完成并编译核心且重新启动后,把本文件编译后就可运行了.

系统调用和程序接口

1、系统调用 系统调用是操作系统内核和用户态运行程序之间的接口,它把用户程序的请求传送至内核,调用相应的 内核函数完成所需的处理,将处理结果返回给用户程序。 系统中各种共享资源都由操作系统统一管理,因...
  • dongyanxia1000
  • dongyanxia1000
  • 2016年06月09日 09:29
  • 1028

库函数与系统调用

系统调用     通常shell是通过系统调用将底层硬件功能向上层应用程序提供,(linux的系统调用约有300多个)。因为系统调用不考虑平台差异性,由内核直接提供,因此移植性较差。 库函数  ...
  • xixihaha331
  • xixihaha331
  • 2016年04月06日 21:19
  • 439

【Linux&Unix--open/close/write/read系统调用】

open系统调用 函数原型及解释 【代码】          调用 open 可以打开一个已经存在的文件(普通文件、特殊文件或命名管道),或创建一个新文件,但它只能创建普通文件(创建特殊文件需要...
  • kana007
  • kana007
  • 2014年08月17日 00:40
  • 2698

系统调用与设备驱动

内置于Unix(以及Linux)系统的方法,被称为系统调用方法,是操作系统的接口。在操作系统的核心(内核)是一些设备驱动(device drivers),这是一系列用来控制系统硬件的底层接口(low-...
  • jaryguo
  • jaryguo
  • 2015年01月23日 16:34
  • 896

python调用系统命令

大概有四种形式,的: 1.os.system('ls'):返回结果为该命令的返回值 2.tmp =os.popen('ls').readlines();将命令返回结果的返回给一个管道,然后读管道获取结...
  • wonderisland
  • wonderisland
  • 2013年12月04日 16:08
  • 6842

操作系统中最基本的概念——库调用和系统调用

http://blog.csdn.net/clearriver/archive/2009/05/05/4152780.aspx Unix操作系统设计上的陈述: 理解库函数的区别和系统调用,首先要里...
  • Lyintong
  • Lyintong
  • 2016年03月20日 15:24
  • 827

窥探 kernel --- 系统调用过程分析

 本系列文章由张同浩编写,转载请注明出处:http://blog.csdn.net/muge0913/article/details/7518568 邮箱:muge0913@sina.co...
  • u011520133
  • u011520133
  • 2015年12月23日 20:59
  • 516

linux 系统调用号表

位置位于 /usr/include/asm/unistd.h 由于我是64位系统,所以有一些额外的东西。我的这个文件为下文#ifndef _ASM_X86_UNISTD_H #define _AS...
  • qq_29343201
  • qq_29343201
  • 2016年08月15日 11:24
  • 2429

Linux下select()系统调用笔记

一、select()函数功能
  • jipingyuan
  • jipingyuan
  • 2014年08月11日 13:49
  • 3726

系统调用基本概念

系统调用时值就是函数调用,值时调用的函数是系统函数,处于内核态而已。用户在调用系统调用时会向内核传递一个系统调用号,然后系统调用处理程序通过此号从系统调用表中找到相应的内核函数执行(系统调用服务例程)...
  • wrx1721267632
  • wrx1721267632
  • 2016年01月18日 16:17
  • 1123
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何调用自行设计的系统调用, --核心开发入门(3)
举报原因:
原因补充:

(最多只允许输入30个字)