哈工大操作系统实验课——系统调用(lab3)

I 实验题目

在linux-0.11上添加两个系统调用并测试
(1)iam()
原型为int iam(const char *name)
将字符串参数name的内容拷贝到内核下保存下来,如果name长度小于等于23,返回拷贝的字符数。如果name的字符个数超过了23,返回-1,置errno为EINVAL。
(2)whoami()
原型为int whoami(char *name, unsigned int size);
iam()保存的名字拷贝到name所指的地址空间。确保不对name越界访问。返回值是拷贝的字符数,如果size小于需要的空间,则返回“-1”,置errno为EINVAL。

II 操作步骤

1.include/unistd.h中添加系统调用号

//include/unistd.h
#define __NR_whoami 72
#define __NR_iam 73

2.kernel/system_call.s修改系统总调用数为74

//kernel/system_call.s
nr_system_calls = 74

3.include/linux/sys.h添加调用

//include/linux/sys.h
extern int sys_whoami();
extern int sys_iam();

fn_ptr_sys_call_table[]={
   ...sys_whoami,sys_iam}

4.编写kernel/who.c

//kernel/who.c
#include <linux/kernel.h>
#include <asm/segment.h>
#include <unistd.h>
#include <errno.h>
int wholen = 0;
char whobuf[30];
int sys_iam(const char* name){
   
    int len;    //计算输入字符串长度
    for(len=0; len<24
  • 7
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值