Linux内核服务例程与系统调用接口

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Linux内核服务例程与系统调用接口

1.用宏生成系统调用例程

高级语言应用程序一般不能直接访问内核函数。但是,总还是有一些高级用

户需要访问内核函数,如果让用户自己编写汇编语言程序来实现内核的陷入,

显然是不合适的,因为它既不安全也不符合设置操作系统的初衷___为用户提

供一个友好的程序设汁平台。

由于用于封装内核服务例程的系统调用例程有一个固定的框架,所以为了简

化对内核服务例程的封装工作,Linux 定义了从_sysca110~_sysca115 的6 个宏,高级用户可使用这些宏把所需的内核服务例程封装为系统调用例程。

上述这6 个宏的名称后的数字表示被封装的内核服务例程可使用的参数个数

(系统调用号除外)。在上述宏对内核服务例程进行封装时,Linux 规定,给宏传

递参数的个数应是内核服务例程所需参数个数的2 倍再加2,即2(n+1)个,其

中″是系统调用的参数个数。也就是说.对于内核服务例程的每一个参数,

在宏中都必须用两个参数来表达:一个用来指明参数的名称,一个用来指明参

数的类型。还要附加两个参数,分别用来表达系统调用返回值的名称和类型。

例如,用宏来封装内核服务例程write()时,就应按下面的格式来调用宏

syscall3:_syscall3(int,write,int,fd,cONst char*,buf,unsingnde int,count)

其中:int 和wrlte 为返回值的类型和名称;int 和fd 为其参数fd 的类型和名称; const char*和buf 为其参数buf 的类型和名称;unsigned lnt 和count 为其参数count 的类型和名称。

2.系统调用接口

一般情况下,作为一个完善的操作系统,是不会让用户应用程序直接使用名

称类似于.svsxyz()形式的系统凋用例程来调用内核服务例程的。所以,通常还

相关文档
最新文档