版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第六章用户接口实验
6.1实验目的
6.1.1控制台命令接口理解面向操作命令的接口SHELL学会简单的SHELL编程
6.1.2系统调用理解操作系统调用的运行机制掌握创建系统调用的方法6.2准备知识16.2.1控制台命令接口
操作系统向用户提供一组控制台命令,用户可以通过终端键入命令的方式获得操作系统的服务,并以此来控制自己作业的运行。一般来讲,控制台命令应该包含:一组命令、终端处理程序以及命令解释程序。关键字参考:echo在终端上显示bash特殊变量1~9保存当前进程或脚本的前9个参数ls列举文件wc统计数量function定义函数建立Bash脚本:编辑Bash脚本
$viscript#!/bin/bashechoHelloworld!测试脚本
$sourcescript更改脚本属性
$chmoda+xscript执行脚本
$./script
26.2.2添加系统调用1.添加源代码asmlinkageintsys_foo(intx){printf("%d\n",x);}2.连接新的系统调用#define__NR_nameNNN3#define__NR_foo222ENTRY(sys_call_table)
.longSYSMBOL_NAME(sys_ni_syscall) .longSYSMBOL_NAME(sys_exit) .longSYSMBOL_NAME(sys_fork)...
.longSYSMBOL_NAME(sys_foo)43.重新编译内核[root@linuxserverroot]#makemenuconfig //配置新内核[root@linuxserverroot]#makedep //创建新内核[root@linuxserverroot]#makemodules_install //加入模块[root@linuxserverroot]#makeclean //清除多余创建的文件[root@linuxserverroot]#makebzImage //生成可执行内核引导文件
54.使用新编译的内核
cp–a/usr/src/linux-2.4.2/arch/i386/boot/bzImage/boot5.重新配置/etc/lilo.conf文件vi/etc/lilo.confimage=/boot/bzImage #启动内核的位置,即自己新配置的内核所在目录label=xhlinux#给内核起一个名称,配置完成,重新启动的时候,会显示这个名称;
#用户可以选择该项,重启后,系统将进入你新配置的内核进行引导。6read_only#定义新的内核为只读root=/dev/hda5 #定义硬盘的启动位置是/dev/hda5,在该设计中没有变#仿照以前内核引导的位置,不用修改,用以前的就可以6.完成以上配置后,重新启动系统进入自己的新系统。76.3实验内容
6.3.1控制台命令接口实验查看Bash版本编写Bash脚本,统计/my目录下c语言文件的个数
6.3.2系统调用实验一、编程调用一个系统调用fork(),观察结果二、编程调用创建的系统调用foo(),观察结果三、自己创建一个系统调用mycall(),实现功能:打印字串到屏幕上四、编程调用自己创建的系统调用6.4实验指导8一.查看Bash版本$echo$BASH_VERSION二.编写Bash脚本,统计/my目录下c语言文件的个数cd/home/student#在home/student目录下编程
vicount#!/bin/bashfunctioncount{echo–n"Numberofmatchesfor$1:"#接收程序的第一个参数
ls$1|wc–l#对子程序的第一个参数所在的目录进行操作}6.4.1控制台命令接口实验指导9mkdirmycdmyvi1.c#在my目录下建立几个c文件,以便用来程序测试...cd...chmod+xcountcount./my/*.c106.4.2系统调用实验指导
一.编程调用系统调用fork()#include<stdio.h>intmain(){ intiUid; iUid=fork(); if(iUid==0) for(;;){printf("Thisisparent.\n");sleep(1); } if(iUid>0) for(;;){ printf("Thisischild.\n"); sleep(1); } if(iUid<0)printf("Cannotusesystemcall.\n"); return0;}11下面是可能得到的一种结果:thisischild.thisisparent.thisischild.thisisparent.thisisparent.thisischild.thisischild.thisisparent.thisisparent.thisischild.thisischild.thisisparent.thisisparent.thisischild.12二.编程调用创建的系统调用foo()#include<stdio.h>#include<linux/unistd.h>_syscall1(char*,foo,int,ret)main(){intI,J;I=100;J=0;J=foo(I);13
printf("Thisistheresultofnewkernel\n");printf("%d",j);}gcc–o–I/usr/src/linux-2.4.2/includetest.c./test14三.创建系统调用mycall()实现功能:打印字串到屏幕上asmlinkagevoidmycall(char*str){ printk("%s\n",str);}#include__NR_mycall223//因为__NR_foo是222,所以这个只能用223了
.longSYMBOL_NAME(sys_mycall)15[root@linuxserverroot]#makemenuconfig //配置新内核[root@linuxserverroot]#makedep //创建新内核[root@linuxserverroot]#makemodules_install //加入模块[root@linuxserverroot]#makeclean //清除多余创建的文件[root@linuxserverroot]#makebzImage //生成可执行内核引导文件[root@linuxserverroot]#cp/usr/src/linux/arch/i386/boot/bzImage/boot/[root@linuxserverroot]#/sbin/lilo16四.编程调用自己创建的系统调用#include<
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 儿科护理:小儿再生障碍性贫血的护理
- ECMO治疗中的呼吸机参数调整与护理
- 儿童皮肤健康生活建议
- 2026中国节能环保校招面试题及答案
- 江苏省淮安市涟水中学2026届高一下生物期末学业水平测试模拟试题含解析
- 山东省临沂市第一中学2026届高一生物第二学期期末综合测试试题含解析
- 2026届葫芦岛市重点中学高一生物第二学期期末复习检测模拟试题含解析
- kfc员工奖惩制度
- 4s店安全生产奖惩制度
- 2026届宁夏中学宁县八下生物期末统考模拟试题含解析
- 机械车间安全隐患排查总结报告
- 薪资核定及管理办法
- 医院运营数据统计分析
- 足球三级裁判试题及答案
- 徐州地铁考试题库及答案
- 房屋地基出租协议书
- 危重新生儿转运规范及流程
- 《高血压诊断与治疗》课件
- 2025-2030中国建筑应用光伏(BAPV)行业市场发展趋势与前景展望战略分析研究报告
- 《国家行政机关》课件
- 《烟气脱硝技术》课件
评论
0/150
提交评论