操作系统实验报告Word文档格式.docx
《操作系统实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《操作系统实验报告Word文档格式.docx(21页珍藏版)》请在冰豆网上搜索。
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及保存文件
」冒号键进入「Lastlinemode」;
输入wfilename将文章以指定的文件名filename保存;
输入wq存盘并退出vi。
将编辑的内容以文件的形式保存在根目录下,如图2所示。
图2根目录文件的显示
三、实验小结、建议及体会
通过这次实验对Linux操作系统有了进一步的了解。
初步掌握了一些Linux系统常用的命令。
同时也熟悉了在Linux常用到的Vi编辑器。
对自己的学习有很大的帮助。
在以后的学习中我会多加实践,我相信,这些都是以后学习该系统的基础。
Linux下C编程
一、实验内容描述(问题域描述)
掌握vi编辑器的使用方法;
掌握Linux下C程序的源程序编辑方法;
编译、连接和运行方法。
内容:
设计、编辑、编译、连接以及运行一个C程序,其中包含键盘输入和屏幕输出语句。
四、实验设计(包括实验方案设计,实验手段的确定,实验步骤,实验过程等)
#include<
stdio.h>
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语言的书
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"
$3"
$4;
}'
$FILENAME
;
;
-a)
test=`echo"
|grep'
^[0-9]\{3\}:
[a-zA-Z]\{1,\}:
[F|f|M|m]\{1\}:
[a-zA-Z]\{1,\}$'
`
if!
[-z"
$test"
]
then
echo"
$FILENAME"
else
student.sh-aSTDNO:
NAME:
SEX:
MAJOR"
fi
-d)
^[0-9]\{3\}$'
forstudentin`cat$FILENAME`
do
if["
${student%%:
*}"
="
];
sed-i'
/'
$student'
/d'
break
done
student.sh-dSTDNO"
-s)
$student"
student.sh-sSTDNO"
*)
Usage:
student.sh[OPTION]"
-a,--addastudent"
-d,--deleteastudent"
-s,--searchastudent"
Esac
PC、操作系统:
Ubuntu11.10。
调试正常
1、没有任何参数
2、查询
3.增加
4、删除
5.参数错误给出提示
6.参数不全,给出提示
通过这次实验熟悉了shell编程,对Linux下的编程有了进一步的了解,也让我对操作系统有了全新的认识,实验中遇到了很多问题,随着自己的一步步解决,自身的技能也随之提升,我会继续努力学习操作系统
Linux系统调用(time)
掌握Linux系统调用使用方法。
学习使用time,ctime,sleep,exit等Linux系统调用使用方法。
三、实验设计(包括实验方案设计,实验手段的确定,实验步骤,实验过程等)
#include<
#include<
unistd.h>
time.h>
iostream>
usingnamespacestd;
while
(1)
chartimebuf[100];
time_tt;
time(&
t);
strftime(timebuf,sizeof(timebuf),"
%Y年%m月%d日%H:
%M:
%S"
localtime(&
t));
cout<
<
timebuf<
endl;
fflush(stdout);
sleep
(1);
return0;
Ubuntu操作系统
Vi编辑器
GCC编译器
ctime(将时间和日期以字符串格式表示)
表头文件
定义函数
char*ctime(consttime_t*timep);
函数说明
ctime()将参数timep所指的time_t结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果以字符串形态返回。
此函数已经由时区转换成当地时间,字符串格式为“WedJun3021:
49:
081993\n”。
若再调用相关的时间日期函数,此字符串可能会被破坏。
返回值
返回一字符串表示目前当地的时间日期。
time(取得目前的时间)
time_ttime(time_t*t);
此函数会返回从公元1970年1月1日的UTC时间从0时0分0秒算起到现在所经过的秒数。
如果t并非空指针的话,此函数也会将返回值存到t指针所指的内存。
成功则返回秒数,失败则返回((time_t)-1)值,错误原因存于errno中。
sleep(让进程暂停执行一段时间)
unsignedintsleep(unsignedintseconds);
sleep()会令目前的进程暂停,直到达到参数seconds所指定的时间,或是被信号所中断。
若进程暂停到参数seconds所指定的时间则返回0,若有信号中断则返回剩余秒数。
二、实验结果描述
四、实验小结、建议及体会
通过这次实验学习使用time,ctime,sleep,exit等Linux系统调用使用方法,在以后会多多了解Linux系统调用的更多方法。
Linux进程控制(fork)
掌握Linux系统中进程控制原语fork的使用方法。
设计C程序,其中主进程创建一个子进程,以特定次序各自执行规定操作后退出。
signal.h>
stdlib.h>
sys/types.h>
sys/stat.h>
fcntl.h>
sys/ipc.h>
sys/shm.h>
#definekey1024
#definesize160
staticvoidsign(int);
intshmid;
char*shmaddr;
main()
pid_tpid;
charstr[20];
shmid=shmget(key,size,IPC_CREAT|0600);
if((pid=fork())<
0)
perror("
创建子进程错误!
elseif(pid==0)
if(signal(SIGUSR1,sign)==SIG_ERR)
printf("
SIGUSR1错误!
pause();
子进程结束!
sleep
(1);
shmaddr=(char*)shmat(shmid,NULL,0);
请输入字符串:
scanf("
%s"
str);
strcpy(shmaddr,str);
shmdt(shmaddr);
kill(pid,SIGUSR1);
wait();
shmctl(shmid,IPC_RMID,NULL);
staticvoidsign(intsignnum)
intfd;
if(signnum==SIGUSR1)
子进程接收到SIGUSR1.\n"
if((fd=open("
testfile.txt"
O_RDWR|O_CREAT|O_TRUNC))==-1)
\n打开文件错误!
return0;
else
写入:
%s\n"
shmaddr);
write(fd,shmaddr,20);
close(fd);
pid_tfork(
void);
(pid_t是一个宏定义,其实质是int被定义在#include<
中)
返回值:
若成功调用一次则返回两个值,子进程返回0,父进程返回子进程ID;
否则,出错返回-1
函数说明:
一个现有进程可以调用fork函数创建一个新进程。
由fork创建的新进程被称为子进程(childprocess)。
fork函数被调用一次但返回两次。
两次返回的唯一区别是子进程中返回0值而父进程中返回子进程ID。
子进程是父进程的副本,它将获得父进程数据空间、堆、栈等资源的副本。
注意,子进程持有的是上述存储空间的“副本”,这意味着父子进程间不共享这些存储空间。
linux将复制父进程的地址空间内容给子进程,因此,子进程有了独立的地址空间。
fork会返回两次:
由于在复制时复制了父进程的堆栈段,所以两个进程都停留在fork函数中,等待返回。
因为fork函数会返回两次,一次是在父进程中返回,另一次是在子进程中返回,这两次的返回值是不一样的。
经过此次实验,我学会了如何通过shm共享内存实现各进程间的数据共享,以及如何在父子进程之间发送信号和传输数据以及一些保存文件的操作,通过这次实验我受益良多。