Linux实验指导书.docx

上传人:b****2 文档编号:18613541 上传时间:2023-08-20 格式:DOCX 页数:34 大小:108.72KB
下载 相关 举报
Linux实验指导书.docx_第1页
第1页 / 共34页
Linux实验指导书.docx_第2页
第2页 / 共34页
Linux实验指导书.docx_第3页
第3页 / 共34页
Linux实验指导书.docx_第4页
第4页 / 共34页
Linux实验指导书.docx_第5页
第5页 / 共34页
Linux实验指导书.docx_第6页
第6页 / 共34页
Linux实验指导书.docx_第7页
第7页 / 共34页
Linux实验指导书.docx_第8页
第8页 / 共34页
Linux实验指导书.docx_第9页
第9页 / 共34页
Linux实验指导书.docx_第10页
第10页 / 共34页
Linux实验指导书.docx_第11页
第11页 / 共34页
Linux实验指导书.docx_第12页
第12页 / 共34页
Linux实验指导书.docx_第13页
第13页 / 共34页
Linux实验指导书.docx_第14页
第14页 / 共34页
Linux实验指导书.docx_第15页
第15页 / 共34页
Linux实验指导书.docx_第16页
第16页 / 共34页
Linux实验指导书.docx_第17页
第17页 / 共34页
Linux实验指导书.docx_第18页
第18页 / 共34页
Linux实验指导书.docx_第19页
第19页 / 共34页
Linux实验指导书.docx_第20页
第20页 / 共34页
亲,该文档总共34页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Linux实验指导书.docx

《Linux实验指导书.docx》由会员分享,可在线阅读,更多相关《Linux实验指导书.docx(34页珍藏版)》请在冰点文库上搜索。

Linux实验指导书.docx

Linux实验指导书

《Linux操作系统》

实验指导书

 

适用专业:

计算机科学与技术

 

江苏科技大学计算机科学与工程学院

 

2008年12月

前言

 

本课程是计算机科学与技术专业的一门专业基础课。

通过学习主要使学生掌握操作系统的基本原理,课程以Linux操作系统为例进行讲解,实验也是在Linux操作系统下进行的。

为了加深和巩固学生对操作系统实现原理的理解,培养学生熟练运用操作系统进行应用程序设计,本课程设置了7个实验,对操作系统基本操作、程序设计基础、进程管理、存储管理、文件管理、设备管理、网络管理等方面设置了实验。

具体实验项目为:

(1)实验一熟悉Linux常用命令;

(2)实验二Linux下程序设计基础;

(3)实验三Linux下进程间管道通信;

(4)实验四IPC进程间共享内存通信;

(5)实验五IPC信号量使用

(6)实验六Linux内存基本原理

(7)实验七Linux文件管理实验

(8)实验八设备驱动程序

(9)实验九Linux下socket网络通信。

实验一要求熟练Linux下的常用命令,熟练地操作linux。

实验二要求掌握vim编辑器,gcc编译器和gdb调试器的使用。

实验三要求掌握有名管道和无名管道的使用。

实验四要求熟悉共享内存的实现原理,并掌握其使用方法。

实验五要求掌握信号量的使用方法。

实验六要求掌握内存的操作及内存分配和回收等函数的使用。

实验七要求掌握文件操作函数的使用。

实验八要求理解驱动程序的结构,自己编写简单的模块程序。

实验九要求理解网络间进程间通信的基本理论,了解客户/服务器模式;掌握socket的结构以及通信的实现方法。

 

实验一熟悉Linux常用命令

实验学时:

3学时

实验类型:

演示

实验要求:

必修

一. 实验目的:

1.  掌握Linux下各类命令的使用方法;

2.  熟悉Linux操作环境。

二.   实验内容:

练习使用Linux常用命令。

三.   实验环境:

一台已经安装好Linux操作系统的主机/或安装过vmware的windows系统。

四、  实验操作:

虚拟机的安装见附件1

Linux下常用命令见附件2

1)     获得命令帮助

分别演示一下help--helpmaninfo命令的用法;

2)     目录操作命令

(1)启动计算机,利用root用户登录到系统,查看提示符,区别#和$提示符。

(2)用pwd命令查看当前所在的目录。

(3)用ls命令列出此目录下的文件和目录,包括ls-a;ls-l;ls-R等选项的使用。

(4)使用cd装换目录命令,练习绝对路径和相对路径的使用.\

(5) 进入/home目录下,创建目录test,进入test目录,在该目录下创建一个文件hello.C,创建一个目录toto,进入toto目录,创建子目录tata,创建文件test.c.

(6)删除创建的hello.c,删除目录toto.

(7)在/root下创建文件hello.c,拷贝该文件到/home/test下(如果test目录不存在自己创建),并命名文件为tt.c。

(8)  使用catmorelesstailhead显示文件的内容。

只看/etc/passwd的前5行内容。

只看/etc/passwd的后5行内容。

(9)管道的使用,cathello.c|grep"hello",在hello.C文件中查找具有字符串"hello"的行.

(10)重定向的使用。

符号>>>发现其不同的用法。

(11)压缩命令的使用。

创建三个文件1.Jpg2.Jpg3.Jpg,

把三个文件打包tarcvfhello.tar1.Jpg2.Jpg3.jpg

压缩gziphello.tar

将hello.tar拷贝到其他目录下解压缩:

gzip-dhello.tar.gz

解包hello.tar

tar-xvfhello.tar

(12)练习拷贝命令,重命名命令,查找命令的使用

(13)熟悉根文件系统下的目录

1)文件操作命令

(1)查找/etc下的passwd这个文件。

(2)      查找/home目录下的所有文件名中有profile的文件,其命令为。

(3)在/home下面创建test目录,在test目录下创建目录a,在a目录下创建目录b,在b目录中创建目录c.在目录c中创建d,用一个命令完成。

(4)创建一个软连接指向/usr/src的源代码,修改源文件,查看连接文件是否改变

2)用户管理与组管理

(1)建立帐号user01,查看/etc/passwd文件有没变化,并设置user01的密码为123456。

在查看/etc/shadow文件有无变化。

●        查看/etc/group文件。

●        新建一个组,组名为group01,在新建一个用户user02,并指定它的组为group01

●        把user02的组更改为user01,

●        删除user01这个用户

●        删除group01这个组

5)  文件的权限属性

●        查看/etc/passwd的权限,在查看/etc/shadow的权限。

●        在/home下面新建afile文件,查看它的权限

●        新建user02这个帐户,

●        新建group02这个组,

●        把afile的权限设置为对用户来说可读可写,对组来说可读,对其他用户来说没有任何权限

●        把afile文件的所有者更该为user02,所属组更改为group02,

五、    思考题:

1、 如何查看隐含文件列表?

2、如何将一个目录中的所有文件拷贝到另一个目录中,包括这个目录中的隐含文件。

3、 如何删除一个目录包括其中的所有文件,并且不显示任何提示信息?

4、 什么是绝对路径?

什么是相对路径?

如何表示?

实验二Linux下程序设计基础

实验学时:

3学时

实验类型:

验证

实验要求:

必修

一.  实验目的:

1.  掌握Linux下常用编辑器的使用;

2.  掌握linux下程序的编译/调试方法。

二.   实验内容:

练习linux下的c语言程序设计,熟练使用vim编辑器编辑文件。

学会gcc编译器的使用及常用的编译选项。

能够使用gdb调试器进行调试程序。

三.   实验环境:

一台已经安装好Linux操作系统的主机/或安装过vmware的windows系统。

四、实验操作:

1.Vi编辑器的使用

1)vi编辑器的启动

在控制台下输入

$vi

$vi文件名

即可启动vi编辑器。

如果文件是一个新文件,就会在屏幕底部现实一个信息,说明用户正

在创建新文件。

2)Vi编辑进入插入模式

3)Vi的保存与退出(末行模式下常用命令)

4)命令模式下常用的命令

命令

含义

x

删除光标所指向的当前字符

nx

删除光标所指向的前n个字符

dd

删除光标所在行,并去除空隙

ndd

删除n行内容,并去除空隙

小写字母p

将缓冲区的内容粘贴到光标的后面

大写字母P

将缓冲区的内容粘贴到光标的前面

yy

复制当前行到内存缓冲区

nyy

复制n行内容到内存缓冲区

u

撤消前一条命令的结果

练习要求:

用vi编辑器编写一段文字,然后用上述命令进行操作,最后保存退出。

2.Gcc编译器的使用

1)用vi编辑器编写一个简单helloworld程序,命名为hello.c,保存退出。

2)Gcc编译该hello.c文件,要求生成hello可执行文件,并加入调试信息。

3)运行hello文件,查看实验结果。

Gcc下常用的命令选项:

-c选项:

告诉gcc仅把源程序编译为目标代码而并不做链接工作生成.o文件

-o选项:

默认情况下,在gcc没有指定编译选项的情况下会在当前目录生成一个名为a.out的可执行程序。

-g选项:

在可执行文件中输出调试信息,通常是为调试器gdb所用

-Idir选项:

指定库以及头文件搜索路径

-Ldir选项:

指定在目录中需要搜索的库(动态库.so和静态库.a)

3.Gdb调试器的使用

进入gdb调试环境

Gdbhello

然后用如下命令进行操作:

调试基本步骤:

✧Gdb<可执行文件名>进入程序调试环境

✧Break设置断点

✧Run运行程序

✧Next单步运行

五、思考题:

1.断点是否可以设置多个,自己试试看。

如何清除所设的断点?

2.如果要调试程序,编译时有何要求?

自己写一个完整的程序,该程序主要完成数组排序,按照由小到大顺序排列给定数组的数据。

并进行编译、调试,查看运行结果,写出整个步骤。

实验三Linux下进程间管道通信

实验学时:

4学时

实验类型:

综合

实验要求:

必修

一.  实验目的:

1.  掌握Linux下有名管道和无名管道通信的原理;

2.  掌握Linux下进程创建、撤销的方法。

二.   实验内容:

(1)编写程序,创建一个进程,通过无名管道实现父子进程之间的通信。

(2)创建一个有名管道,实现任意两个进程之间的通信。

三.   实验环境:

一台已经安装好Linux操作系统的主机/或安装过vmware的windows系统。

四、实验原理

1.无名管道

无名管道只能实现父子进程或具有亲缘关系的进程间的通信,系统调用为:

intpipe(intpipe[2]),参数是2个元素的int型数组,pipe[0]是读取管道的文件标识符,pipe[1]是写入管道的文件标识符。

所使用的头文件#include

Ø使用时先建立管道再建立子进程的顺序不能变。

若不然,先建立子进程,再建立管道,管道只对建立它的进程可见,对另一个进程是看不见的,因此无法实现父子间的通信。

2.有名管道

有名管道可以实现任意两个进程间的通信,不局限于具有亲缘关系的进程。

系统调用为:

intmkfifo(constchar*path,mode_tmode),

path:

要使用的命名管道的路径和名字

mode指明管道的访问权限(O_RDONLY,O_WRONLY,O_RDWR)

所使用的头文件:

#include#include

五、实验参考代码

1.无名管道通信

pipe(pipe_fd)

if((pid=fork())==0)

{

close(pipe_fd[1]);

sleep

(2);

if((r_num=read(pipe_fd[0],buf_r,100))>0){

printf("%dnumbersreadfromthepipeis%s\n",r_num,buf_r);

}

close(pipe_fd[0]);

exit(0);

}

elseif(pid>0)

{

close(pipe_fd[0]);

if(write(pipe_fd[1],"Hello",5)!

=-1)

printf("parentwrite1success!

\n");

if(write(pipe_fd[1],"Pipe",5)!

=-1)

printf("parentwrite2success!

\n");

close(pipe_fd[1]);

sleep(3);

waitpid(pid,NULL,0);

exit(0);

}

六、有名管道的创建

#defineFIFO"/tmp/myfifo"

mkfifo(FIFO,O_CREAT|O_EXCL)

七、实验要求

(1)用无名管道实现父进程和子进程之间的信息传送,父进程发送一段信息,子进程从管道中读出信息并打印。

(2)有名管道实现同样的内容,一个进程发送信息,另外一个进程把信息读出并打印显示。

实验要求写好预习报告。

实验结束时,要写好实验报告,包括实验的源代码以及实验结果图。

八、思考题

1.为什么无名管道只能在具有亲缘关系的进程间通信。

2.管道与文件有什么样的区别。

实验四IPC进程间共享内存通信

实验学时:

4学时

实验类型:

综合

实验要求:

必修

一.  实验目的:

1.  掌握Linux下进程间使用共享内存进行通信的基本原理;

2. 掌握共享内存的使用方法。

二.   实验内容:

1.创建一块共享内存,然后使用该共享内存实现两个进程之间的通信。

三.   实验环境:

一台已经安装好Linux操作系统的主机/或安装过vmware的windows系统。

四.实验原理

1.Linux采用内存映射技术把共享内存区域映射到有关进程的虚拟内存空间,使他成为进程虚拟内存的一部分,从而进程可以对这部分虚拟内存区域进行读写。

错误!

未找到引用源。

对共享内存的基本操作包括:

Ø进程与共享内存的结合;共享内存映射到进程虚拟区域的过程

Ø进程与虚拟内存的分离;当使用共享内存完成数据交换后需要释放相关的虚拟内存区域,即脱离与共享内存的的联系。

Ø主要系统调用

(1)intshmget(key_tkey,intsize,intshmflg)//创建共享内存

(2)shmctl(intshmid,intcmd,structshmid_ds*buf)//共享内存的控制

(3)intshmat(intshmid,char*shmaddr,intshmflg)//共享内存映射到进程虚拟区域

(4)intshmdt(char*shmaddr)//进程与虚拟内存的分离

Ø参考程序段:

shmid=shmget(KEY,SIZE,IPC_CREAT|0600);/*建立共享内存*/

if(shmid==-1){

printf("createsharememoryfailed:

%s",strerror(errno));

return0;

}

if(fork()==0){/*子进程*/

/*系统自动选择一个地址连接*/

shmaddr=(char*)shmat(shmid,NULL,0);

if(shmaddr==(void*)-1){

printf("connecttothesharememoryfailed:

%s",strerror(errno));

return0;

}

strcpy(shmaddr,"hello,thisischildprocess!

\n");

shmdt(shmaddr);/*detach共享内存*/

return0;

}else{/*父进程*/

sleep(3);/*等待子进程执行完毕*/

shmctl(shmid,IPC_STAT,&buf);/*取得共享内存的相关信息*/

printf("sizeofthesharememory:

");

printf("shm_segsz=%dbytes\n",buf.shm_segsz);

printf("processidofthecreator:

");

printf("shm_cpid=%d\n",buf.shm_cpid);

printf("processidofthelastoperator:

");

printf("shm_lpid=%d\n",buf.shm_lpid);

/*系统自动选择一个地址连接*/

shmaddr=(char*)shmat(shmid,NULL,0);

if(shmaddr==(void*)-1){

printf("connectthesharememoryfailed:

%s",strerror(errno));

return0;

}

printf("printthecontentofthesharememory:

");

printf("%s\n",shmaddr);

shmdt(shmaddr);/*detach共享内存*/

五、实验要求

(1)用共享内存实现2个进程之间的通信,一个进程向共享内存发送一段信息,另外一个进程读共享内存并把信息打印显示。

(2)要求写好预习报告。

实验结束时,要写好实验报告,包括实验的源代码以及实验结果图。

六.思考题

1.共享内存通信相比其它通信方式有没有优势?

实验五IPC信号量使用

实验学时:

4学时

实验类型:

综合

实验要求:

必修

一、实验目的:

1.学习在LINUX下信号量的使用方法。

2.学习使用信号量实现进程间互斥操作的原理。

二.   实验内容:

在PC机上编写程序,实现2个进程间的互斥操作。

三.   实验环境:

一台已经安装好Linux操作系统的主机/或安装过vmware的windows系统。

四、实验原理

信号量机制用于进程同步与互斥。

某种资源的信号量代表该资源的数量,可以限制一种资源同时被多少个地方访问。

一个进程如果申请信号量失败,说明那个资源在其他地方被使用,需要等待,于是这个进程会被挂起,等资源释放了再继续。

(1)在Linux下使用信号量的步骤:

1)创建信号量集合

2)初始化信号量的个数,即设置每种信号量有多少个。

3)申请获得某个信号量

4)释放以获得的某个信号量

(2)系统调用

1)创建信号量集合:

intsemget(key_tkey,intnsems,intflag)

a)key是用来生成信号量标识的整数,使用IPC_PRIVATE可以由系统自动选择。

b)nsems是信号量集合中有多少种信号量。

创建两种信号量并不需要调用这个函数两次,只要设置nsems就可以一次创建多种信号量。

c)flag是信号量访问权限,用S_IRWXU设为可读写

2)初始化信号量个数:

intsemctl(intsemid,intsemnum,intcmd,unionsemunarg)

a)semid是信号量集合标识,由semget()产生

b)semnum用来指定要访问信号量集合中的哪个信号量,第一个信号量编号为0,其余递增。

c)cmd是执行的操作,有很多种,这里用SETVAL,设置信号量个数。

d)arg是输入信息,新的信号量个数写在里面。

arg是一个需要自己定义的联合体,结构如下:

unionsemun

{

intval;//要把信号量设置为多少

structsemid_ds*buf;//一个系统定义的结构体,本例中不用理会

ushort*array;//用于一次设置多个信号量,本例不用理会

}

3)申请获得某个信号量:

intsemop(intsemid,structsembufsemoparray[],size_tnops)

a)semid是信号量集合标识,由semget()产生

b)semoparray[]是一个结构体数组,由这个数组指定要操作那个信号量,是申请还是释放,申请多少或释放多少,如果申请不到的话是略过还是等待。

sembuf结构体定义如下:

structsembuf{

ushortsem_num;//选择要操作集合中的哪个信号量,编号从0开始

shortsem_op;//+n表示归还n个信号量,-n表示申请n个信号量

shortsem_flg;//失败处理,IPC_NOWAIT表示略过,SEM_UNDO表示等待

}

c)nops指定取semoparray[]中前多少个数据来进行操作。

4)释放某个信号量:

intsemop(intsemid,structsembufsemoparray[],size_tnops)。

和申请相同,不过在结构体的sem_op中指定正数。

(3)主要头文件

(4)参考代码

unionsemun{

intval;

structsemid_ds*buf;

unsignedshort*array;

}arg;

intsem_creat(key_tkey)

{

unionsemunsem;

intsemid;

sem.val=0;

semid=semget(key,1,IPC_CREAT|0666);

if(-1==semid){

printf("createsemaphoreerror\n");

exit(-1);

}

semctl(semid,0,SETVAL,sem);

returnsemid;

}

voiddel_sem(intsemid)

{

unionsemunsem;

sem.val=0;

semctl(semid,0,IPC_RMID,sem);

}

//p

intp(intsemid)

{

structsembufsops={0,+1,IPC_NOWAIT};

return(semop(semid,&sops,1));

}

//v

intv(intsemid)

{

structsembufsops={0,-1,IPC_NOWAIT};

return(semop(semid,&sops,1));

}

intmain()

{

}

五、实验要求

自己写一个程序,练习信号量的使用。

六、思考题

1、信号量实现进程间互斥的原理是什么?

实验六linux内存基本原理

实验学时:

4学时

实验类型:

综合

实验要求:

必修

一、实验目的

掌握Linux环境下对内存管理的基本操作,感性认识Linux如何对内存进行管理。

二、实验内容

1.练习linux环境下对内存管理常用的操作

2.掌握基本内存操作的系统调用的使用

三、实验环境

一台已经安装好Linux操作系统的主机/或安装过vmware的windows系统。

四、实验步骤

1.显示内存信息

1)在命令行使用“Free”命令监控内存使用情况,并解释输出结果代表的含义

命令:

结果:

分析结果:

2)每5秒以字节为单位来显示内存的使用情况;

命令:

结果:

3)显示交换区的使用状况:

命令:

结果:

4)监视虚拟内存使用情况

命令:

结果:

分析结果:

2. Linux下交换文档的创建和使用

预备知识:

Linux的交换文档相当于Windows的虚拟内存,但是Linux能够使用整个分区做为交换空间,也能够像Windows相同使用单个的文档做虚拟内存。

Linux支持虚拟内存,就是使用磁盘作为RAM的扩展,使可用内存相应地有

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

当前位置:首页 > 小学教育

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

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