《第六章 用户接口实验》由会员分享,可在线阅读,更多相关《第六章 用户接口实验(18页珍藏版)》请在金锄头文库上搜索。
1、1第六章第六章 用户接口实验用户接口实验 6.1 6.1 实验实验目的 6.1.1 6.1.1 控制台命令接口控制台命令接口理解面向操作命令的接口SHELL学会简单的SHELL编程 6.1.2 6.1.2 系统调用系统调用理解操作系统调用的运行机制掌握创建系统调用的方法6.2 6.2 准备知识准备知识26.2.1 6.2.1 控制台命令接口控制台命令接口 操作系统向用户提供一组控制台命令,用户可以通过终端键入命令的方式获得操作系统的服务,并以此来控制自己作业的运行。一般来讲,控制台命令应该包含:一组命令、终端处理程序以及命令解释程序。 关键字参考:关键字参考:echo 在终端上显示bash 特
2、殊变量19 保存当前进程或脚本的前9个参数ls 列举文件wc 统计数量function 定义函数 建立建立BashBash脚本脚本: :编辑编辑Bash脚本脚本 $ vi script#! /bin/bashecho Hello world !测试脚本测试脚本 $ source script更改脚本属性更改脚本属性 $ chmod a+x script执行脚本执行脚本 $ ./script 36.2.2 6.2.2 添加系统调用添加系统调用 p1添加源代码asmlinkage int sys_foo(int x) printf(%dn,x);p2连接新的系统调用# define _NR _na
3、me NNN4# define _NR _foo 222ENTRY(sys_call_table) .long SYSMBOL_NAME(sys_ni_syscall) .long SYSMBOL_NAME(sys_exit) .long SYSMBOL_NAME(sys_fork) .long SYSMBOL_NAME(sys_foo) 53 3重新编译内核重新编译内核rootlinuxserver root# make menuconfig / 配置新内核rootlinuxserver root# make dep / 创建新内核rootlinuxserver root# make mod
4、ules_install / 加入模块rootlinuxserver root# make clean / 清除多余创建的文件rootlinuxserver root# make bzImage / 生成可执行内核引导文件 6p4使用新编译的内核 cp a /usr/src/linux-2.4.2/arch/i386/boot/bzImage /boot p5重新配置/etc/lilo.conf 文件vi /etc/lilo.confimage=/boot/bzImage #启动内核的位置, 即自己新配置的内核所在目录label=xhlinux #给内核起一个名称, 配置完成, 重新启动的时候
5、, 会显示这个名称; #用户可以选择该项, 重启后, 系统将进入你新配置的内核进行引导。7read_only #定义新的内核为只读root=/dev/hda5 #定义硬盘的启动位置是/dev/hda5, 在该设计中没有变 #仿照以前内核引导的位置, 不用修改, 用以前的就可以 p6完成以上配置后,重新启动系统进入自己的新系统。86.3 6.3 实验内容实验内容 6.3.1 控制台命令接口实验查看Bash版本编写Bash脚本,统计/my目录下c语言文件的个数 6.3.2 系统调用实验 一、编程调用一个系统调用fork(),观察结果二、编程调用创建的系统调用foo(),观察结果三、自己创建一个系统
6、调用mycall(),实现功能:打印字串到屏幕上四、编程调用自己创建的系统调用6.4 6.4 实验指导实验指导9一查看Bash版本$echo $BASH_VERSION二编写Bash脚本,统计/my目录下c语言文件的个数cd /home/student #在home/student目录下编程 vi count #! /bin/bash function count echo n Number of matches for $1: #接收程序的第一个参数 ls $1|wc l #对子程序的第一个参数所在的目录进行操作 6.4.1 6.4.1 控制台命令接口实验指导控制台命令接口实验指导10mkd
7、ir mycd myvi 1.c #在my目录下建立几个c文件, 以便用来程序测试 .cd .chmod +x countcount ./my/*.c 116.4.2 系统调用实验指导 一编程调用系统调用fork( )# include int main()int iUid;iUid=fork();if(iUid=0)for(;) printf(This is parent.n); sleep(1); if(iUid0)for(;) printf(This is child.n);sleep(1);if(iUid0) printf(Can not use system call.n);retu
8、rn 0; 12下面是可能得到的一种结果:下面是可能得到的一种结果:this is child.this is parent.this is child.this is parent.this is parent.this is child.this is child.this is parent.this is parent.this is child.this is child.this is parent.this is parent.this is child. 13二编程调用创建的系统调用二编程调用创建的系统调用foo( foo( ) )#include #include _sysc
9、all1(char*,foo,int,ret)main()int I,J;I=100;J=0;J=foo(I);14 printf(This is the result of new kerneln);printf(%d,j); gcc o I /usr/src/linux-2.4.2/include test.c./test15三创建系统调用三创建系统调用mycall()mycall()实现功能:打印字串到屏幕上实现功能:打印字串到屏幕上asmlinkage void mycall(char *str) printk(%sn,str); # include _NR_mycall 223 /
10、因为_NR_foo是222, 所以这个只能用223了 .long SYMBOL_NAME(sys_mycall) 16rootlinuxserver root# make menuconfig / 配置新内核rootlinuxserver root# make dep / 创建新内核rootlinuxserver root# make modules_install / 加入模块rootlinuxserver root# make clean / 清除多余创建的文件rootlinuxserver root# make bzImage / 生成可执行内核引导文件rootlinuxserver r
11、oot# cp /usr/src/linux/arch/i386/boot/bzImage /boot/rootlinuxserver root# /sbin/lilo 17四编程调用自己创建的系统调用四编程调用自己创建的系统调用#include syscall1(char*,mycall,int,ret)int main() char *str; char string50; str=string; str=This string will be displayed.; mycall(str); return 0; 温馨提示:本PPT课件下载后,即可编辑修改,也可直接使用。(希望本课件对您有所帮助)