操作系统实验报告.docx
- 文档编号:8611721
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:21
- 大小:482.86KB
操作系统实验报告.docx
《操作系统实验报告.docx》由会员分享,可在线阅读,更多相关《操作系统实验报告.docx(21页珍藏版)》请在冰豆网上搜索。
操作系统实验报告
学生学号
实验课成绩
武汉理工大学
学生实验报告书
实验课程名称操作系统
开课学院计算机科学与技术学院
指导老师姓名
学生姓名
学生专业班级软件班
201—201学年第一学期
实验课程名称:
操作系统
实验项目名称
Linux键盘命令和vi
实验成绩
实验者
专业班级
组别
同组者
实验日期
年月日
第一部分:
实验分析与设计(可加页)
一、实验内容描述(问题域描述)
要求:
掌握Linux系统键盘命令的使用方法。
二、实验设计(包括实验方案设计,实验手段的确定,实验步骤,实验过程等)
1)命令行模式commandmode)
控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insertmode下,或者到lastlinemode。
2)插入模式(Insertmode)
只有在Insertmode下,才可以做文字输入,按「ESC」键可回到命令行模式。
3)底行模式(lastlinemode)
将文件保存或退出vi,也可以设置编辑环境,如寻找字符串、列出行号等。
一般情况下将底行模式也算是命令模式,所以平常vi就被简化成两个模式即,命令行模式和插入模式。
2、vi的基本操作
1)进入vi
在系统提示符号输入vi及文件名称后,就进入vi全屏幕编辑画面:
例如:
$vimyfile
不过有一点要特别注意,就是您进入vi之后,是处于「命令行模式(commandmode)」,要切换到「插入模式(Insertmode)」才能够输入文字。
2)切换至插入模式(Insertmode)编辑文件
在「命令行模式(commandmode)」下按一下字母「i」就可以进入「插入模式(Insertmode)」,这时候就可以开始输入文字了。
3)Insert的切换
处于「插入模式(Insertmode)」,就只能一直输入文字,按一下「ESC」键转到「命令行模式(commandmode)」能够删除文字。
4)退出vi及保存文件
在「命令行模式(commandmode)」下,按一下「:
」冒号键进入「Lastlinemode」,例如:
:
wmyfilename(输入「wmyfilename」将文章以指定的文件名myfilename保存)
:
wq(输入「wq」,存盘并退出vi)
:
q!
(输入q!
,不存盘强制退出vi)
3、命令行模式(commandmode)功能键
1).插入模式
按「i」切换进入插入模式「insertmode」,按「i」进入插入模式后是从光标当前位置开始输入文件;
按「a」进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字;
按「o」进入插入模式后,是插入新的一行,从行首开始输入文字。
2).从插入模式切换为命令行模式
按「ESC」键即可。
3).移动光标
vi可以直接用键盘上的光标来上下左右移动,但正规的vi是用小写英文字母「h」、「j」、「k」、「l」,分别控制光标左、下、上、右移一格。
按「ctrl」+「b」:
屏幕往后移动一页。
按「ctrl」+「f」:
屏幕往前移动一页。
按「ctrl」+「u」:
屏幕往后移动半页。
按「ctrl」+「d」:
屏幕往前移动半页。
按数字「0」:
移到文章的开头。
按「G」:
移动到文章的最后。
按「$」:
移动到光标所在行的行尾。
按「^」:
移动到光标所在行的行首。
按「w」:
光标跳到下个字的开头。
按「e」:
光标跳到下个字的字尾。
按「b」:
光标回到上个字的开头。
4).删除文字
「x」:
每按一次,删除光标所在位置的后面一个字符。
「#x」:
例如,「3x」表示删除光标所在位置的后面3个字符。
「X」:
大写的X,每按一次,删除光标所在位置的前面一个字符。
「#X」:
例如,「2X」表示删除光标所在位置的前面2个字符。
「dd」:
删除光标所在行。
「#dd」:
从光标所在行开始删除#行
5).复制
「yw」:
将光标所在之处到字尾的字符复制到缓冲区中。
「#yw」:
复制#个字到缓冲区。
「yy」:
复制光标所在行到缓冲区。
「#yy」:
例如,「3yy」表示拷贝从光标所在的该行往下数3行文字。
「p」:
将缓冲区内的字符贴到光标所在位置。
注意:
所有与“y”有关的复制命令都必须与“p”配合才能完成复制与粘贴功能。
6).回复上一次操作
「u」:
如果您误执行一个命令,可以马上按下「u」,回到上一个操作。
按多次「u」可以执行多次回复。
7).跳至指定的行
「ctrl」+「g」列出光标所在行的行号。
「#G」:
例如,「7G」,表示移动光标至文章的第7行行首。
4、Lastlinemode下命令简介
在使用「lastlinemode」之前,请记住先按「ESC」键确定您已经处于「commandmode」下后,再按「:
」冒号即可进入「lastlinemode」。
1)列出行号
「setnu」:
输入「setnu」后,会在文件中的每一行前面列出行号。
2)查找字符
「/」:
先按「/」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往后寻找到您要的关键字为止。
「?
」:
先按「?
」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往前寻找到您要的关键字为止。
3)保存文件
「w」:
在冒号后输入字母「w」就可以将文件保存起来。
4)离开vi
「q」:
按「q」就是退出,如果无法离开vi,可以在「q」后跟一个「!
」表示强制离开vi。
「qw」:
一般建议离开时,搭配「w」一起使用,这样在退出的时候还可以保存文件。
三、主要实验工具、仪器设备及耗材
安装Linux系统的计算机一台。
第二部分:
实验结果分析(可加页)
一、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)
实验过程中,出现过指令记忆出错,最终查阅资料纠正。
其他方面均很成功。
二、实验结果描述
vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器。
由于对Unix及Linux系统的任何版本,vi编辑器是完全相同的,因此可以在任何介绍vi的地方进一步了解它。
学会vi有助于我们学习Unix及Linux。
1.进入vi
在系统提示符号输入vi及文件名称后,就进入vi全屏幕编辑画面。
vi的主界面如图1所示。
图1vi主界面
2.切换至插入模式(Insertmode)编辑文件
在「命令行模式(commandmode)」下按一下字母「i」就可以进入「插入模式(Insertmode)」,这时候你就可以开始输入文字了。
插入内容如图2所示。
3.退出vi及保存文件
在「命令行模式(commandmode)」下,按一下「:
」冒号键进入「Lastlinemode」;输入wfilename将文章以指定的文件名filename保存;输入wq存盘并退出vi。
将编辑的内容以文件的形式保存在根目录下,如图2所示。
图2根目录文件的显示
三、实验小结、建议及体会
通过这次实验对Linux操作系统有了进一步的了解。
初步掌握了一些Linux系统常用的命令。
同时也熟悉了在Linux常用到的Vi编辑器。
对自己的学习有很大的帮助。
在以后的学习中我会多加实践,我相信,这些都是以后学习该系统的基础。
实验课程名称:
操作系统
实验项目名称
Linux下C编程
实验成绩
实验者
专业班级
组别
同组者
实验日期
年月日
第一部分:
实验分析与设计(可加页)
一、实验内容描述(问题域描述)
要求:
掌握vi编辑器的使用方法;掌握Linux下C程序的源程序编辑方法;编译、连接和运行方法。
内容:
设计、编辑、编译、连接以及运行一个C程序,其中包含键盘输入和屏幕输出语句。
四、实验设计(包括实验方案设计,实验手段的确定,实验步骤,实验过程等)
#include
intmain()
{
inti,j;
for(i=1;i<=9;i++)
{
for(j=1;j<=i;j++)
{
printf("%d*%d=%-2d",i,j,i*j);
}
printf("\n");
}
return0;
}
三、主要实验工具、仪器设备及耗材
Ubuntu操作体统、emacs编辑器、gcc编译器。
第二部分:
实验结果分析(可加页)
一、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)
1.输入源代码
引用
$vihello.c>>>>进入vi编辑器环境
#include>>>如果你看不懂这个函数,就去好好的看c语言的书
intmain()
{
printf(“HelloWorld.\n”);>>>>Emacs环境下,按下Tab键,有自动缩进功能
exit(0);
}
完成输入后,按住CTRL键,按下x,再按下c,最后松开CTRL。
>>>>程序保留并退出emacs环境。
2.编译,链接,运行
引用
$gcc–ohellohello.c
$./hello>>>>./指明了所执行程序的路径
HelloWorld.
$
一个linux平台上的c程序开发已经完成咯
3.调试
如果要使用gdb调试程序,那么在上一步编译的时候,记得加上–g选项
引用
$gcc–g–ohellohello.c
$gdbhello>>>>进入gdb调试环境
二、实验结果描述
编译运行
三、实验小结、建议及体会
通过这次实验vi编辑器有了进一步的应用,同时学会了在Linux进行简单的C语言编程,掌握Linux下C程序的源程序编辑方法;编译、连接和运行方法。
在以后的学习中会加大努力加强自己的编程能力。
实验课程名称:
操作系统
实验项目名称
SHELL编程和后台批处理
实验成绩
实验者
专业班级
组别
同组者
实验日期
年月日
第一部分:
实验分析与设计(可加页)
一、实验内容描述(问题域描述)
要求:
掌握Linux系统的SHELL编程方法和后台批处理方法。
内容:
(1)将编译、连接以及运行上述C程序各步骤用SHELL程序批处理完成,前台运行。
(2)将上面SHELLL程序后台运行。
观察原C程序运行时输入输出情况。
(3)修改调试上面SHELL程序和C程序,使得在后台批处理方式下,原键盘输入内容可以键盘命令行位置参数方式交互式输入替代原键盘输入内容,然后输出到屏幕。
二、实验设计(包括实验方案设计,实验手段的确定,实验步骤,实验过程等)
#!
/bin/bash
#student.sh
FILENAME="student.txt"
case$1in
"")
awk-F:
'{print$1"\t"$2"\t"$3"\t"$4;}'$FILENAME
;;
-a)
test=`echo"$2"|grep'^[0-9]\{3\}:
[a-zA-Z]\{1,\}:
[F|f|M|m]\{1\}:
[a-zA-Z]\{1,\}$'`
if!
[-z"$test"]
then
echo"$2">>"$FILENAME"
else
echo"student.sh-aSTDNO:
NAME:
SEX:
MAJOR"
fi
;;
-d)
test=`echo"$2"|grep'^[0-9]\{3\}$'`
if!
[-z"$test"]
then
forstudentin`cat$FILENAME`
do
if["${student%%:
*}"="$2"];then
sed-i'/'$student'/d'$FILENAME
break
fi
done
else
echo"student.sh-dSTDNO"
fi
;;
-s)
test=`echo"$2"|grep'^[0-9]\{3\}$'`
if!
[-z"$test"]
then
forstudentin`cat$FILENAME`
do
if["${student%%:
*}"="$2"];then
echo"$student"
break
fi
done
else
echo"student.sh-sSTDNO"
fi
;;
*)
echo"Usage:
student.sh[OPTION]"
echo"-a,--addastudent"
echo"-d,--deleteastudent"
echo"-s,--searchastudent"
;;
Esac
三、主要实验工具、仪器设备及耗材
PC、操作系统:
Ubuntu11.10。
第二部分:
实验结果分析(可加页)
一、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)
调试正常
二、实验结果描述
1、没有任何参数
2、查询
3.增加
4、删除
5.参数错误给出提示
6.参数不全,给出提示
三、实验小结、建议及体会
通过这次实验熟悉了shell编程,对Linux下的编程有了进一步的了解,也让我对操作系统有了全新的认识,实验中遇到了很多问题,随着自己的一步步解决,自身的技能也随之提升,我会继续努力学习操作系统
实验课程名称:
操作系统
实验项目名称
Linux系统调用(time)
实验成绩
实验者
专业班级
组别
同组者
实验日期
年月日
第一部分:
实验分析与设计(可加页)
一、实验内容描述(问题域描述)
要求:
掌握Linux系统调用使用方法。
内容:
学习使用time,ctime,sleep,exit等Linux系统调用使用方法。
三、实验设计(包括实验方案设计,实验手段的确定,实验步骤,实验过程等)
#include
#include
#include
#include
usingnamespacestd;
intmain()
{
while
(1)
{
chartimebuf[100];
time_tt;
time(&t);
strftime(timebuf,sizeof(timebuf),"%Y年%m月%d日%H:
%M:
%S",localtime(&t));
cout< fflush(stdout); sleep (1); } return0; } 三、主要实验工具、仪器设备及耗材 Ubuntu操作系统 Vi编辑器 GCC编译器 第二部分: 实验结果分析(可加页) 一、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等) ctime(将时间和日期以字符串格式表示) 表头文件 #include 定义函数 char*ctime(consttime_t*timep); 函数说明 ctime()将参数timep所指的time_t结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果以字符串形态返回。 此函数已经由时区转换成当地时间,字符串格式为“WedJun3021: 49: 081993\n”。 若再调用相关的时间日期函数,此字符串可能会被破坏。 返回值 返回一字符串表示目前当地的时间日期。 time(取得目前的时间) 表头文件 #include 定义函数 time_ttime(time_t*t); 函数说明 此函数会返回从公元1970年1月1日的UTC时间从0时0分0秒算起到现在所经过的秒数。 如果t并非空指针的话,此函数也会将返回值存到t指针所指的内存。 返回值 成功则返回秒数,失败则返回((time_t)-1)值,错误原因存于errno中。 sleep(让进程暂停执行一段时间) 表头文件 #include 定义函数 unsignedintsleep(unsignedintseconds); 函数说明 sleep()会令目前的进程暂停,直到达到参数seconds所指定的时间,或是被信号所中断。 返回值 若进程暂停到参数seconds所指定的时间则返回0,若有信号中断则返回剩余秒数。 二、实验结果描述 四、实验小结、建议及体会 通过这次实验学习使用time,ctime,sleep,exit等Linux系统调用使用方法,在以后会多多了解Linux系统调用的更多方法。 实验课程名称: 操作系统 实验项目名称 Linux进程控制(fork) 实验成绩 实验者 专业班级 组别 同组者 实验日期 年月日 第一部分: 实验分析与设计(可加页) 一、实验内容描述(问题域描述) 要求: 掌握Linux系统中进程控制原语fork的使用方法。 内容: 设计C程序,其中主进程创建一个子进程,以特定次序各自执行规定操作后退出。 四、实验设计(包括实验方案设计,实验手段的确定,实验步骤,实验过程等) #include #include #include #include #include #include #include #include #include #definekey1024 #definesize160 staticvoidsign(int); intshmid; char*shmaddr; main() { pid_tpid; charstr[20]; shmid=shmget(key,size,IPC_CREAT|0600); if((pid=fork())<0) { perror("创建子进程错误! \n"); exit(0); } elseif(pid==0) { if(signal(SIGUSR1,sign)==SIG_ERR) { printf("SIGUSR1错误! \n"); exit(0); } pause(); printf("子进程结束! \n"); exit(0); } sleep (1); shmaddr=(char*)shmat(shmid,NULL,0); printf("请输入字符串: "); scanf("%s",str); strcpy(shmaddr,str); shmdt(shmaddr); kill(pid,SIGUSR1); wait(); shmctl(shmid,IPC_RMID,NULL); } staticvoidsign(intsignnum) { intfd; char*shmaddr; if(signnum==SIGUSR1) { printf("子进程接收到SIGUSR1.\n"); shmaddr=(char*)shmat(shmid,NULL,0); if((fd=open("testfile.txt",O_RDWR|O_CREAT|O_TRUNC))==-1) { printf("\n打开文件错误! \n"); return0; } else { printf("写入: %s\n",shmaddr); write(fd,shmaddr,20); close(fd); } shmdt(shmaddr); } } 三、主要实验工具、仪器设备及耗材 第二部分: 实验结果分析(可加页) 一、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等) pid_tfork( void); (pid_t是一个宏定义,其实质是int被定义在#include 返回值: 若成功调用一次则返回两个值,子进程返回0,父进程返回子进程ID;否则,出错返回-1 函数说明: 一个现有进程可以调用fork函数创建一个新进程。 由fork创建的新进程被称为子进程(childprocess)。 fork函数被调用一次但返回两次。 两次返回的唯一区别是子进程中返回0值而父进程中返回子进程ID。 子进程是父进程的副本,它将获得父进程数据空间、堆、栈等资源的副本。 注意,子进程持有的是上述存储空间的“副本”,这意味着父子进程间不共享这些存储空间。 linux将复制父进程的地址空间内容给子进程,因此,子进程有了独立的地址空间。 fork会返回两次: 由于在复制时复制了父进程的堆栈段,所以两个进程都停留在fork函数中,等待返回。 因为fork函数会返回两次,一次是在父进程中返回,另一次是在子进程中返回,这两次的返回值是不一样的。 二、实验结果描述 三、实验小结、建议及体会 经过此次实验,我学会了如何通过shm共享内存实现各进程间的数据共享,以及如何在父子进程之间发送信号和传输数据以及一些保存文件的操作,通过这次实验我受益良多。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 实验 报告