ImageVerifierCode 换一换
格式:DOCX , 页数:34 ,大小:108.72KB ,
资源ID:18613541      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-18613541.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Linux实验指导书.docx)为本站会员(b****2)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

Linux实验指导书.docx

1、Linux实验指导书 Linux操作系统实 验 指 导 书适用专业:计算机科学与技术江苏科技大学计算机科学与工程学院2008年 12月前 言本课程是计算机科学与技术专业的一门专业基础课。通过学习主要使学生掌握操作系统的基本原理,课程以Linux操作系统为例进行讲解,实验也是在Linux操作系统下进行的。为了加深和巩固学生对操作系统实现原理的理解,培养学生熟练运用操作系统进行应用程序设计,本课程设置了7个实验,对操作系统基本操作、程序设计基础、进程管理、存储管理、文件管理、设备管理、网络管理等方面设置了实验。具体实验项目为:(1) 实验一 熟悉Linux常用命令;(2) 实验二 Linux下程序

2、设计基础;(3) 实验三 Linux下进程间管道通信;(4) 实验四 IPC进程间共享内存通信;(5) 实验五 IPC信号量使用(6) 实验六 Linux内存基本原理(7) 实验七 Linux文件管理实验(8) 实验八 设备驱动程序(9) 实验九 Linux 下socket网络通信。实验一要求熟练Linux下的常用命令,熟练地操作linux。实验二要求掌握vim编辑器,gcc编译器和gdb调试器的使用。实验三要求掌握有名管道和无名管道的使用。实验四要求熟悉共享内存的实现原理,并掌握其使用方法。实验五要求掌握信号量的使用方法。实验六要求掌握内存的操作及内存分配和回收等函数的使用。实验七 要求掌握

3、文件操作函数的使用。实验八要求理解驱动程序的结构,自己编写简单的模块程序。实验九要求理解网络间进程间通信的基本理论,了解客户/服务器模式;掌握socket的结构以及通信的实现方法。实验一 熟悉Linux常用命令实验学时:3学时实验类型:演示 实验要求:必修一.实验目的:1 掌握Linux下各类命令的使用方法;2 熟悉Linux操作环境。二. 实验内容:练习使用Linux常用命令。三. 实验环境:一台已经安装好Linux操作系统的主机/或安装过vmware的windows系统。四、 实验操作: 虚拟机的安装见附件1 Linux下常用命令见附件2 1) 获得命令帮助分别演示一下help -help

4、 man info 命令的用法; 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

5、.c,拷贝该文件到/home/test下(如果test目录不存在自己创建),并命名文件为tt.c。(8)使用cat more less tail head显示文件的内容。 只看/etc/passwd的前5行内容。只看/etc/passwd的后5行内容。(9)管道的使用,cat hello.c | grep hello,在hello.C文件中查找具有字符串hello的行.(10)重定向的使用。符号 发现其不同的用法。(11)压缩命令的使用。创建三个文件 1.Jpg 2.Jpg 3.Jpg, 把三个文件打包tar cvf hello.tar 1.Jpg 2.Jpg 3.jpg 压缩gzip hel

6、lo.tar 将hello.tar拷贝到其他目录下解压缩: gzip -d hello.tar.gz 解包hello.tar tar -xvf hello.tar(12)练习拷贝命令,重命名命令,查找命令的使用(13)熟悉根文件系统下的目录1) 文件操作命令(1) 查找 /etc下的passwd这个文件。(2) 查找/home目录下的所有文件名中有profile的文件,其命令为。(3) 在/home下面创建test目录,在test目录下创建目录a,在a目录下创建目录b,在b目录中创建目录c.在目录c中创建d,用一个命令完成。(4) 创建一个软连接指向/usr/src的源代码,修改源文件,查看连

7、接文件是否改变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这个

8、组, 把afile的权限设置为对用户来说可读可写,对组来说可读,对其他用户来说没有任何权限 把afile文件的所有者更该为user02,所属组更改为group02,五、 思考题:1、如何查看隐含文件列表?2、 如何将一个目录中的所有文件拷贝到另一个目录中,包括这个目录中的隐含文件。3、如何删除一个目录包括其中的所有文件,并且不显示任何提示信息?4、什么是绝对路径?什么是相对路径?如何表示?实验二 Linux下程序设计基础实验学时:3学时实验类型:验证 实验要求:必修一. 实验目的:1 掌握Linux下常用编辑器的使用;2 掌握linux下程序的编译/调试方法。二. 实验内容:练习linux下的

9、 c语言程序设计,熟练使用vim编辑器编辑文件。学会gcc编译器的使用及常用的编译选项。能够使用gdb调试器进行调试程序。三. 实验环境:一台已经安装好Linux操作系统的主机/或安装过vmware的windows系统。四、实验操作:1. Vi 编辑器的使用1)vi 编辑器的启动在控制台下输入$ vi或$ vi 文件名即可启动vi 编辑器。如果文件是一个新文件,就会在屏幕底部现实一个信息,说明用户正在创建新文件。2)Vi编辑进入插入模式3)Vi的保存与退出(末行模式下常用命令)4)命令模式下常用的命令命令含义x删除光标所指向的当前字符 nx 删除光标所指向的前 n 个字符dd 删除光标所在行,

10、并去除空隙 ndd删除 n 行内容,并去除空隙 小写字母 p将缓冲区的内容粘贴到光标的后面 大写字母 P将缓冲区的内容粘贴到光标的前面 yy 复制当前行到内存缓冲区nyy复制 n 行内容到内存缓冲区 u 撤消前一条命令的结果 练习要求:用vi编辑器编写一段文字,然后用上述命令进行操作,最后保存退出。2.Gcc编译器的使用 1)用vi编辑器编写一个简单hello world程序,命名为hello.c,保存退出。 2)Gcc 编译该hello.c文件,要求生成hello可执行文件,并加入调试信息。 3)运行hello文件,查看实验结果。Gcc下常用的命令选项:-c 选项:告诉gcc仅把源程序编译为

11、目标代码而并不做链接工作生成.o文件-o选项:默认情况下,在gcc没有指定编译选项的情况下会在当前目录生成一个名为a.out的可执行程序。g选项:在可执行文件中输出调试信息,通常是为调试器gdb所用Idir选项:指定库以及头文件搜索路径Ldir选项:指定在目录中需要搜索的库(动态库.so和静态库.a)3.Gdb调试器的使用进入gdb 调试环境Gdb hello 然后用如下命令进行操作:调试基本步骤: Gdb 进入程序调试环境 Break设置断点 Run运行程序 Next 单步运行五、思考题:1 断点是否可以设置多个,自己试试看。如何清除所设的断点?2 如果要调试程序,编译时有何要求?自己写一个

12、完整的程序,该程序主要完成数组排序,按照由小到大顺序排列给定数组的数据。并进行编译、调试,查看运行结果,写出整个步骤。实验三 Linux下进程间管道通信实验学时:4学时实验类型:综合 实验要求:必修一.实验目的:1 掌握Linux下有名管道和无名管道通信的原理;2 掌握Linux下进程创建、撤销的方法。二. 实验内容:(1)编写程序,创建一个进程,通过无名管道实现父子进程之间的通信。(2)创建一个有名管道,实现任意两个进程之间的通信。三. 实验环境:一台已经安装好Linux操作系统的主机/或安装过vmware的windows系统。四、实验原理1无名管道无名管道只能实现父子进程或具有亲缘关系的进

13、程间的通信,系统调用为: int pipe(int pipe2),参数是2个元素的int型数组,pipe0是读取管道的文件标识符,pipe1是写入管道的文件标识符。所使用的头文件 #include 。 使用时先建立管道再建立子进程的顺序不能变。若不然,先建立子进程,再建立管道,管道只对建立它的进程可见,对另一个进程是看不见的,因此无法实现父子间的通信。2有名管道有名管道可以实现任意两个进程间的通信,不局限于具有亲缘关系的进程。系统调用为:int mkfifo(const char *path,mode_t mode), path:要使用的命名管道的路径和名字mode指明管道的访问权限(O_RD

14、ONLY,O_WRONLY,O_RDWR)所使用的头文件:#include #include 五、实验参考代码 1.无名管道通信 pipe(pipe_fd) if(pid=fork()=0) close(pipe_fd1); sleep(2); if(r_num=read(pipe_fd0,buf_r,100)0) printf( %d numbers read from the pipe is %sn,r_num,buf_r); close(pipe_fd0); exit(0); else if(pid0) close(pipe_fd0); if(write(pipe_fd1,Hello,5

15、)!=-1) printf(parent write1 success!n); if(write(pipe_fd1, Pipe,5)!=-1) printf(parent write2 success!n); close(pipe_fd1); sleep(3); waitpid(pid,NULL,0); exit(0); 六、 有名管道的创建#define FIFO /tmp/myfifomkfifo(FIFO,O_CREAT|O_EXCL)七、实验要求(1)用无名管道实现父进程和子进程之间的信息传送,父进程发送一段信息,子进程从管道中读出信息并打印。(2)有名管道实现同样的内容,一个进程发送

16、信息,另外一个进程把信息读出并打印显示。实验要求写好预习报告。实验结束时,要写好实验报告,包括实验的源代码以及实验结果图。八、思考题1为什么无名管道只能在具有亲缘关系的进程间通信。2管道与文件有什么样的区别。实验四 IPC进程间共享内存通信实验学时:4学时实验类型:综合 实验要求:必修一. 实验目的:1 掌握Linux下进程间使用共享内存进行通信的基本原理;2掌握共享内存的使用方法。二. 实验内容:1创建一块共享内存,然后使用该共享内存实现两个进程之间的通信。三. 实验环境:一台已经安装好Linux操作系统的主机/或安装过vmware的windows系统。四实验原理1Linux采用内存映射技术

17、把共享内存区域映射到有关进程的虚拟内存空间,使他成为进程虚拟内存的一部分,从而进程可以对这部分虚拟内存区域进行读写。错误!未找到引用源。对共享内存的基本操作包括: 进程与共享内存的结合;共享内存映射到进程虚拟区域的过程 进程与虚拟内存的分离;当使用共享内存完成数据交换后需要释放相关的虚拟内存区域,即脱离与共享内存的的联系。 主要系统调用(1) int shmget(key_t key,int size,int shmflg)/创建共享内存(2) shmctl(int shmid,int cmd,struct shmid_ds *buf)/共享内存的控制(3) int shmat(int shm

18、id,char*shmaddr,int shmflg) /共享内存映射到进程虚拟区域(4) int shmdt(char*shmaddr)/进程与虚拟内存的分离 参考程序段:shmid = shmget(KEY,SIZE,IPC_CREAT|0600); /* 建立共享内存*/if(shmid = -1)printf(create share memory failed: %s,strerror(errno);return 0;if(fork() = 0) /* 子进程*/* 系统自动选择一个地址连接*/shmaddr = (char *)shmat(shmid,NULL,0);if(shma

19、ddr = (void *)-1)printf(connect to the share memory failed: %s,strerror(errno);return 0;strcpy(shmaddr,hello, this is child process!n);shmdt(shmaddr); /* detach共享内存*/return 0;else /* 父进程*/sleep(3); /* 等待子进程执行完毕*/shmctl(shmid,IPC_STAT,&buf); /* 取得共享内存的相关信息*/printf( size of the share memory: );printf(

20、shm_segsz = %d bytes n,buf.shm_segsz);printf( process id of the creator: );printf(shm_cpid = %d n,buf.shm_cpid);printf( process id of the last operator: );printf(shm_lpid = %d n,buf.shm_lpid);/* 系统自动选择一个地址连接*/shmaddr = (char *)shmat(shmid,NULL,0);if(shmaddr = (void *)-1)printf(connect the share memo

21、ry failed: %s,strerror(errno);return 0;printf(print the content of the share memory: );printf(%s n,shmaddr);shmdt(shmaddr); /* detach共享内存*/ 五、实验要求 (1)用共享内存实现2个进程之间的通信,一个进程向共享内存发送一段信息,另外一个进程读共享内存并把信息打印显示。 (2)要求写好预习报告。实验结束时,要写好实验报告,包括实验的源代码以及实验结果图。六思考题1共享内存通信相比其它通信方式有没有优势? 实验五 IPC信号量使用实验学时:4学时实验类型:综合

22、实验要求:必修一、实验目的: 1学习在LINUX 下信号量的使用方法。 2学习使用信号量实现进程间互斥操作的原理。二.实验内容:在PC机上编写程序,实现2个进程间的互斥操作。三.实验环境:一台已经安装好Linux操作系统的主机/或安装过vmware的windows系统。四、实验原理信号量机制用于进程同步与互斥。某种资源的信号量代表该资源的数量,可以限制一种资源同时被多少个地方访问。一个进程如果申请信号量失败,说明那个资源在其他地方被使用,需要等待,于是这个进程会被挂起,等资源释放了再继续。(1)在Linux下使用信号量的步骤:1) 创建信号量集合2) 初始化信号量的个数,即设置每种信号量有多少

23、个。3) 申请获得某个信号量4) 释放以获得的某个信号量(2)系统调用1) 创建信号量集合:int semget(key_t key, int nsems, int flag)a) key是用来生成信号量标识的整数,使用IPC_PRIVATE可以由系统自动选择。b) nsems是信号量集合中有多少种信号量。创建两种信号量并不需要调用这个函数两次,只要设置nsems就可以一次创建多种信号量。c) flag是信号量访问权限,用S_IRWXU设为可读写2) 初始化信号量个数:int semctl(int semid, int semnum, int cmd, union semun arg)a) s

24、emid是信号量集合标识,由semget()产生b) semnum用来指定要访问信号量集合中的哪个信号量,第一个信号量编号为0,其余递增。c) cmd是执行的操作,有很多种,这里用SETVAL,设置信号量个数。d) arg是输入信息,新的信号量个数写在里面。arg是一个需要自己定义的联合体,结构如下:union semun int val; /要把信号量设置为多少 struct semid_ds *buf; /一个系统定义的结构体,本例中不用理会 ushort *array; /用于一次设置多个信号量,本例不用理会3)申请获得某个信号量:int semop(int semid, struct

25、sembuf semoparray, size_t nops)a) semid是信号量集合标识,由semget()产生b) semoparray是一个结构体数组,由这个数组指定要操作那个信号量,是申请还是释放,申请多少或释放多少,如果申请不到的话是略过还是等待。sembuf结构体定义如下:struct sembuf ushort sem_num; /选择要操作集合中的哪个信号量,编号从0开始 short sem_op; /+n表示归还n个信号量,-n表示申请n个信号量 short sem_flg; /失败处理,IPC_NOWAIT表示略过,SEM_UNDO表示等待c) nops指定取semop

26、array中前多少个数据来进行操作。4)释放某个信号量:int semop(int semid, struct sembuf semoparray, size_t nops)。和申请相同,不过在结构体的sem_op中指定正数。(3)主要头文件(4)参考代码union semun int val; struct semid_ds *buf; unsigned short *array; arg;int sem_creat(key_t key) union semun sem; int semid; sem.val = 0; semid = semget(key,1,IPC_CREAT|0666)

27、; if (-1 = semid) printf(create semaphore errorn); exit(-1); semctl(semid,0,SETVAL,sem); return semid;void del_sem(int semid) union semun sem; sem.val = 0; semctl(semid,0,IPC_RMID,sem);/pint p(int semid) struct sembuf sops=0,+1,IPC_NOWAIT; return (semop(semid,&sops,1);/vint v(int semid) struct sembu

28、f sops=0,-1,IPC_NOWAIT; return (semop(semid,&sops,1);int main() 五、实验要求自己写一个程序,练习信号量的使用。六、思考题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