《操作系统实验报告样本》.docx

上传人:聆听****声音 文档编号:1966726 上传时间:2023-05-02 格式:DOCX 页数:28 大小:206.91KB
下载 相关 举报
《操作系统实验报告样本》.docx_第1页
第1页 / 共28页
《操作系统实验报告样本》.docx_第2页
第2页 / 共28页
《操作系统实验报告样本》.docx_第3页
第3页 / 共28页
《操作系统实验报告样本》.docx_第4页
第4页 / 共28页
《操作系统实验报告样本》.docx_第5页
第5页 / 共28页
《操作系统实验报告样本》.docx_第6页
第6页 / 共28页
《操作系统实验报告样本》.docx_第7页
第7页 / 共28页
《操作系统实验报告样本》.docx_第8页
第8页 / 共28页
《操作系统实验报告样本》.docx_第9页
第9页 / 共28页
《操作系统实验报告样本》.docx_第10页
第10页 / 共28页
《操作系统实验报告样本》.docx_第11页
第11页 / 共28页
《操作系统实验报告样本》.docx_第12页
第12页 / 共28页
《操作系统实验报告样本》.docx_第13页
第13页 / 共28页
《操作系统实验报告样本》.docx_第14页
第14页 / 共28页
《操作系统实验报告样本》.docx_第15页
第15页 / 共28页
《操作系统实验报告样本》.docx_第16页
第16页 / 共28页
《操作系统实验报告样本》.docx_第17页
第17页 / 共28页
《操作系统实验报告样本》.docx_第18页
第18页 / 共28页
《操作系统实验报告样本》.docx_第19页
第19页 / 共28页
《操作系统实验报告样本》.docx_第20页
第20页 / 共28页
亲,该文档总共28页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

《操作系统实验报告样本》.docx

《《操作系统实验报告样本》.docx》由会员分享,可在线阅读,更多相关《《操作系统实验报告样本》.docx(28页珍藏版)》请在冰点文库上搜索。

《操作系统实验报告样本》.docx

《操作系统原理》

班级:

计科80902

学号:

090004208

姓名:

冯晓明 指导教师:

朱新山

2010-2011 学年 第 二 学期

实验名称:

LINUX用户界面

实验时间:

2011年4月27日 第10 周 星期3 成绩

一、实验目的

1.基于Windows系统使用经验,熟悉XWindow图形操作环境。

2.熟悉Linux字符操作界面,熟练掌握常用Shell命令。

3.熟悉Linux中文本编辑方法,学会编辑软件vi的使用。

4.了解Linux编绎器gcc的功能,掌握基于Linux平台的C程序开发。

二、实验预习(预备知识的问题及回答)

1.解释文件系统装载和装载点。

由于文件系统的差异,Linux在默认情况下并不支持软盘、光盘和U盘,所以需要通过装载相应盘片才可以访问其中的数据。

装载点是挂载文件系统的目录位置。

2.给出Linux系统中各设备的名称(虚拟机环境中):

软盘 fdo 光盘hdc 硬盘sda Usb接口的优盘 sdb1

3.权限的含义是什么?

如何使用数字法设定文件的权限?

权限的含义

Linux系统中的每个文件和目录都有相应的访问许可权限,访问权限分为只读(r),可写(w)和可执行三种。

有三种不同类型的用户可对文件或目录进行访问,分别是文件所有者(u),同组用户(g)和其他用户(o)。

所有的文件和目录都被创建它们的人所“拥有”,只要你是这个文件的所有者或你登录为根用户,你就拥有了改变所有者、组群和其他人权限的权利。

使用数字法改变权限

命令格式chmod权限数值文件名

说明给指定文件赋予数值所规定的权限。

在数字设定法中,每种权限设置均可用数值来代表,其中0表示没有权限,1表

示可执行权限,2表示可写权限,4表示可读权限,这些值之和便可用来设立特定权限。

所以数字属性的格式应为3个0~7的八进制数,3个数表示的次序为u、g和o。

例:

将文件file6设置为rwxr-x—x权限,命令为:

Chmod751file64.什么是I/O重定向?

(1)输入重定向<命令格式 命令<文件名

说明将命令(或可执行程序)的标准输入重定向到指定的文件中。

例:

cat

(2)输出重定向<命令格式 命令>文件名

说明将命令(或可执行程序)的标准输出或标准错误输出重定向到指定文件中。

例:

ls /etc>/test1/etc.txt表示将/etc目录下的文件列表输出到文件/text1/etc.txt中。

5.在Linux中挂载u盘并能显示其文档的中文信息,所使用的挂载命令是:

挂载U盘

命令格式 mount /dev/sda1 /mnt/usb 。

6.什么是vi的三种操作模式?

vi有3种基本工作模式:

命令模式(CommandMode)、输入模式(InsertMode)和末行模式(LastLineMode)。

7.图示三种工作模式转换图。

i,a,o

eso

输入模式

末行模式

,?

,/

命令模式

启动vi

三、实验内容(包含实验所用命令或相关程序源代码)

1.shell操作命令

(1)创建名为stu1、stu2的2个用户,设置密码分别为student1和student2 ,并将它们设为组group1中的成员。

#useraddstu1

#passwdstu1回车后敲入密码student1

#groupaddgroup1

#usremod –g group1stu1#useraddstu2–ggroup1

#sustu2

$passwd回车后敲入密码student2

(2)在每个用户的主目录下建立2个目录,分别命名为dir1和dir2。

[stu1@localhostroot]$cd~

[stu1@localhoststu1]mkdirdir1[stu1@localhoststu1]sustu2[stu2@localhoststu2]mkdirdir2

(3)查找stu1用户主目录、下属各子目录的默认存取权限,并给出结论。

$cd~

$ls–l

dir1目录权限为:

drwxr-xr-x,即目录的用户可读、写、执行,同组用户可读、执行,其他用户可读、执行。

$cd..

$ls–l

用户主目录权限为:

drwx ,即目录的用户可读、写、执行,同组和其他用户无任

何权限。

(4)调试pwd和cd命令,回答下列关于Linux文件系统中目录的有关问题。

①用户主目录的绝对路径如何表示?

/home/stu1,/home/stu2

②根目录如何表示?

/

③.和..分别表示什么目录?

本级目录,父目录

④~表示什么目录?

用户主目录

(5)新建用户stu3,设置其密码为student3,并将其设置为group2中成员。

尔后,以stu3登录,在其主目录下建立名为text的目录,在text目录下再建立名为dir1的子目录,并使其成为当前目录。

#groupaddgroup2

#useraddstu3–ggroup2#sustu3

$passwd回车后敲入密码student3

$cd~

$mkdirtext

$mkdirdir1

$cdtext/dir1

(6)使用以下命令,分析下列命令行的显示结果。

$cat>sneakers.txtbuysomesneakers

thengotothecoffeeshopthenbuysomecoff

^D

$catsneakers.txt

命令将输入重定向至文件sneakers.txt中,cat命令可以显示文本文件的内容。

(7)使用上题的方法,在dir1目录中建立home.txt文件,其内容为:

bringthecoffeehome

takeoffshoesputonsneakers

makesomecoffeerelax!

$cd/home/stu1/dir1

$cat>home.txt

bringthecoffeehometakeoffshoes

putonsneakersmakesomecoffeerelax!

[ctrl+D]

(8)试写出实现下列功能的shell命令:

①将home.txt文件移至其上级目录中(即text目录下)。

$mv./home.txt ..

②将home.txt添加到sneakers.txt尾部形成新的文件saturday.txt。

$catsneakers.txt>saturday.txt

$cathome.txt>>Saturday.txt

③将text目录树从stu3用户主目录下移至stu2主目录下。

$su

#mv /home/stu3/text /home/stu2

④将Saturday.txt文件从stu1目录中复制到stu2目录中。

#cp/home/stu1/saturday.txt /home/stu2

(9)试画出上述命令后,用户主目录中的目录树。

2.LinuxC程序开发

(1)使用cat>source命令,建立一个包含若干空行的source文本文件,编写C程序将source中的空行过滤后显示出来。

【源程序】

//程序compact.c如下:

#includemain()

{

intlen=0,i=0,j;

charc,line[100];while((c=getchar())!

=EOF)

{

If(c!

=’\n’)

{line[i]=c;i++;

if(c!

=’’&&c!

=’\t’) len++; //若该行有非空字符,则len长度增加

}

else

if(len>0)

{line[i]=c;

for(j=0;j<=I;j++)printf(“%c”,line[j]);len=0;

i=0;

}

}

}

gcc–o compact compact.ccat>source

thisisline1thisisline2

thisisline4

【运行与测试】:

./compact

(2)使用C语言编写一个反向打印程序,使之能够将输入文件中文本行按逆序打印出来

(即后出现的文本行先打印)。

【源程序】#include#includemain()

{FILE*fp;

charc,buf[100];

inti=0,len=0,j=0,k;

fp=fopen(“myfile”,”w+”); //新建一个文件并输入while((c=getchar())!

=EOF)

{fputc(c,fp);len++;

}

len=len-1;

while((fseek(fp,-2L,1)==0)&&(j

{c=fgetc(fp);

i++;j++; //i为每行的字符个数,j是总的字符个数

if(c==’\n’){fread(buf,i,1,fp);

for(k=0;k

i=0;}

if(j==len) {fseek(fp,-1,1); //fgetc读取字符后指针后移一个字符,所以要向前移

fread(buf,i,1,fp);

for(k=0;k

}

}

}

【运行与测试】

3.附加题

使用C语言编写一个词频统计程序,使之能够搜索指定单词在输入文件中的出现次数。

【源程序】

#include#includeintmain(argc,argv)intargc;

char*argv[];

{ inti,flag=0;match=0;charc,*str;

argv++;str=*argv;i=0;

while((c=getchar()!

=EOF)

{if((i

{str++; i++;}else

{if((i==strlen(*argv))&&(c==’‘||c==’,’||c==’\t’))

//如果匹配的字符个数和输入字符数相等

{match++; i=0; str=*argv;}else

{if(c==’‘||c==’,’||c==’\t’)flag=0; //flag标志表示每次从单词首部开始比较

elseflag=1; //flag=1表示单词的第一个字母不匹配,无须再比较

}

}

}

Printf(“string:

%sappears%dtimes\n”,*argv,match);

}

【运行与测试】

四、调试体会

实验名称:

SHELL程序设计

实验时间:

年 月 日 第 周 星期 成绩

一、实验目的

1.熟悉Shell脚本编程的步骤,掌握基于Bash的Shell脚本开发。

2.掌握Shell脚本中变量、条件测试的使用。

3.掌握Shell脚本中的控制流结构和函数的使用。

二、实验预习(预备知识的问题及回答)

1.Linux系统默认的shell语言是什么?

欲查看该shell的版本,应使用什么命令?

Linux系统默认的shell语言是Bashshell。

欲查看该shell的版本,应使用的命令是:

$echo$BASH_VERSION

2.预习shell有关变量和参数的相关知识,回答下列问题。

(1)假设用户进行了如下的赋值操作:

$person=jenny

试给出下面命令的输出结果。

1)echoperson person

2)echo$person jenny

3)echo‘$person’ $person

4)echo“$person” jenny

(2)填充下列与环境变量、位置变量和预定义变量相关的表格。

Shell变量

定义

HOME

用于保存用户注册目录的绝对路径

PATH

保存用冒号分隔的目录路径,shell将按PATH变量中给出的顺序搜索这些目录,找到第一个与命令名一致的可执行文件

将被执行。

PWD

当前工作目录的绝对路径名,该变量取

值随cd命令的使用而变化。

PS1

主提示符,默认特权用户为#,普通用户

为$。

$0

表示当前shell程序的文件名。

$#

表示位置参数的个数。

$?

前一命令执行后返回的状态。

$$

当前进程的pid。

3.写出下列expr命令的输出:

expr index “value” ‘a’expr “value”:

‘v.*u’

expr “aaa”:

‘a\+’

expr “aaa”:

‘a\?

答:

2

4

3

1

三、实验内容

1. 编写Shell脚本,当用户输入要检索的字符串后,该程序能检索指定串在文件哪些行中出现及出现总次数。

【源程序】

若输出指定字符串出现的行数,脚本如下:

readstr

grep-c$str“myfile” #将myfile文件中匹配的行数输出

按题意,输出指定串在文中出现的位置和次数的脚本程序如下:

i=1 #记录字符串出现的位置num=0 #记录字符串出现次数readstr #读取一行

strlen=`expr length“$str”`whiletest$strlen–ne0

do

whiletest$strlen–ne0do

location=`expr index “$str” “.*.*”` #查找空格在字符串中出现的第一个位置

location1=`expr$location–1`

ss=`exprsubstr$str1$location1` #取空格前的字符串len=`exprlength“$ss”`

iftest“$ss”=“$1” #如果该字符串和输入的指定串(指定串作为第一个参数输入)相等

then

num=`expr$num+1`echo“thelocationis$i”fi

i=`expr$i+$len`i=`expr$i+1`

strlen=`expr$strlen-$len`strlen=`expr$strlen–1`location2=`expr$location+1`

str=`expr substr “$str” $location2$strlen`done

readstr

strlen=`expr length“$str”`done

echo“theword:

$1appears$numtimes”

2.编写Shell脚本,从命令行中接收一个二元算术表达式并计算其结果。

#!

/bin/bashiftest$#=3then

case$2in

+)letz=$1+$3;;

-)letz=$1-$3;;

/)letz=$1/$3;;x|X)letz=$1*$3;;

*)echo“Warning-$2invalidoperator!

”exit;;esac

echo“Answeris$z”else

echo“Usage-$0Value1operatorvalue2”

fi

【运行与测试】

2.编写Shell脚本,从命令行中接收一个二元算术表达式并计算其结果。

【源程序】

#!

/bin/bashiftest$#=3then

case$2in

+)letz=$1+$3;;

-)letz=$1-$3;;

/)letz=$1/$3;;x|X)letz=$1*$3;;

*)echo“Warning-$2invalidoperator!

”exit;;esac

echo“Answeris$z”else

echo“Usage-$0Value1operatorvalue2”

fi

【运行与测试】

3.编写一个以文件列表作为输入的过滤器程序,要求文件名含有以句点“.”分隔的后缀,过滤器输出每个文件的不带句点和后缀的文件名。

【源程序】

过滤器程序filter脚本程序如下:

readflag

while test “$flag” !

= “#” #输入的文件列表以井号结束do

location=`expr “$flag” :

“.*\.”`location=`expr $location–1`

basename=`expr substr “$flag” 1 $location`echo$basename

readflagdone

可以采用文件重定向输入,将含有后缀的文件列表存于filelist中,并以井号结束,之后修

改filter文件的可执行属性,再执行./filter

【运行与测试】

4.编写shell脚本,统计/my目录下C语言文件的个数。

【源程序】

通过Bash脚本,可以有多种方式实现这个功能,而使用函数是其中的一个选择。

在使用函数之前,必须先定义函数。

首先进入自己的工作目录/home/stu1,用vi编写名为count的文件。

cd/home/student #在home/stu1目录下编程vicount

下面是脚本程序:

#!

/bin/bashfunction

cou

nt

{

echo –n “Numberofmatchesfor$1:

” #接受程序的第一个参数

ls $1|wc–l #对子程序的第一个参数所在的目录进行操作

}

执行:

将count文件复制到当前目录下,然后在当前目录下建立文件夹mymkdirmy

cdmy

vi1.c #在my目录下建立几个c文件,以便用来程序测试

……cd..

chmod+xcountcount“./my/*.c”

【运行与测试】

四、调试体会

实验名称:

进程控制与通信

实验时间:

年 月 日 第 周 星期 成绩

一、实验目的

1.加深进程概念的理解,体会进程创建过程,进一步认识进程的异步并发特征。

2.了解Linux系统中,进程通信的基本原理,重点掌握进程的信号通信和管道通信机制。

3.掌握Linux系统中,与进程控制和进程通信相关的系统调用。

二、实验预习(预备知识的问题及回答)

1.写出下列系统调用功能:

(1)fork()用于 创建进程

(2)getpid()用于 获取当前进程id号

(3)wait()用于 等待子进程结束

(4)exit()用于 进程自我终止

(5)pipe()用于 创建无名管道

(6)signal()用于 在信号和信号处理函数之间建立对应关系

(7)kill()用于 发送信号给指定进程

Pid>0

pid=fork()

2.画出fork系统调用的执行的逻辑框图。

Pid<0

Pid=0

Fork调用失败

当前进程是子程序

当前进程是父进程

3.图示pipe系统调用生成无名管道时所涉及的数据结构。

三、实验内容

1.调试下面的程序,观察可能的并发结果,给出简要分析,并画出进程家族树。

#include

#include#includemain()

{intstatus;

intpid1,pid2,pid3;pid1=fork();

if(pid1<0) {printf("errorinforkpid1!

");

exit(0);}

elseif(pid1==0)

printf("pid1=0,myprocessidis%d\n",getpid());elseif(pid1>0)

{pid2=fork();

if(pid2<0) {printf("errorinforkpid2!

");

exit(0);}elseif(pid2==0)

printf("pid2=0,myprocessidis%d\n",getpid());elseif(pid2>0)

printf("pid2>0,myprocessidis%d\n",getpid());

}

pid3=fork();

if(pid3<0) {printf("errorinforkpid3!

");

exit(0);}

elseif(pid3==0)

printf("pid3=0,myprocessidis%d\n",getpid());elseif(pid3>0)

printf("pid3>0,myprocessidis%d\n",getpid());wait(&status);

exit(0);

}

答:

可能的第一种结果:

pid1=0,myprocessidis1050pid2=0,myprocessidis1050pid1=0,myprocessidis1049pid2>0,myprocessidis1049pid1>0,myprocessidis1051pid2=0,myprocessidis1051pid1>0,myprocessidis1048pid2>0,myprocessidis1048可能的第二种结果:

pid1>0,myprocessidis1051pid2=0,myprocessidis1051pi

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2