版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Linux与分布式系统实验指导书 董黎刚信息与电子工程学院浙江工商大学2006/10/3 15:02:00内容1. Linux的用户交互界面和编程环境(验证性)21.1 实验目的21.2 实验内容21.3 评分标准31.4 补充材料GCC的使用方法32. 进程与线程管理(设计性)72.1 实验目的72.2 实验内容72.3 评分标准72.4 补充材料83. 进程间通信(IPC)(设计性)103.1 实验目的103.2 实验内容103.3 评分标准104. 文件系统(验证性)114.1 实验目的114.2 实验内容114.3 评分标准11
2、5. 设备驱动程序(设计性)125.1 实验目的125.2 实验内容125.3 评分标准125.4 补充材料126. Linux中的服务器搭建(验证性)156.1 实验目的156.2 实验内容156.3 评分标准156.4 补充材料 - wu-ftpd服务器配置手册摘录15Linux与分布式系统实验 Last updated: 2022/1/261. Linux的用户交互界面和编程环境(验证性)姓名: 学号.: 班级: 得分:1.1 实验目的1通过实验了解Linux下的基本命令操作以及VI编辑器的使用。 2熟悉Linux的图形化界面的操作。1.2 实验内容1 Linux下的命令操作(可参照课本
3、第二章进行操作),VI编辑器的使用(可参照课本附录实验二,以及第10章第二节VI编辑器)。2 练习课本附录实验二中的命令操作3 Linux下的图形化界面操作(可参照课本第二章进行操作)4用VI编辑器编写一个打印“hello world”的C程序,保存为c1.c。1.3 评分标准大类明细打分1.回答问题(80%)1在Linux中建立一个用户为abc,密码是abc,命令操作步骤是怎样的? 2如果当前目录下有一个文件abc.conf,其存取控制属性是-rw-r-w-,要把其属性改成-rwxrw-rw-,其命令操作步骤是怎样的?3硬连接和软连接(符号连接)文件,用ls l显示在命令终端下,有什么区别?
4、4用VI生成一个abc.c的C源文件,并保存退出,其在命令终端下的操作步骤是怎样的?2实验过程中遇到的问题及解决方法(20)1.4 补充材料GCC的使用方法Linux系统下的gcc(GNU C Compiler)是GNU推出的功能强大、性能优越的多平台编译器,是GNU的代表作品之一。gcc是可以在多种硬体平台上编译出可执行程序的超级编译器,其执行效率与一般的编译器相比平均效率要高20%30%。 gcc编译器能将C、C+语言源程序、汇程式化序和目标程序编译、连接成可执行文件,如果没有给出可执行文件的名字,gcc将生成一个名为a.out的文件。在Linux系统中,可执行文件没有统一的后缀,系统从文
5、件的属性来区分可执行文件和不可执行文件。而gcc则通过后缀来区别输入文件的类别,下面我们来介绍gcc所遵循的部分约定规则。 .c为后缀的文件,C语言源代码文件; .a为后缀的文件,是由目标文件构成的函数库文件; .c,.cc或.cxx 为后缀的文件,是C+源代码文件; .h为后缀的文件,是程序所包含的头文件; .o为后缀的文件,是编译后的目标文件; .s为后缀的文件,是汇编语言源代码文件; 1. gcc的执行过程 虽然我们称gcc是C语言的编译器,但使用gcc由C语言源代码文件生成可执行文件的过程不仅仅是编译的过程,而是要经历四个相互关联的步骤预处理(也称预编译,Preprocessing)、
6、编译(Compilation)、汇编(Assembly)和连接(Linking)。 函数库中连到合适的地方。 2. gcc的基本用法和选项 在使用gcc编译器的时候,我们必须给出一系列必要的调用参数和文件名称。gcc编译器的调用参数大约有100多个,其中多数参数我们可能根本就用不到,这里只介绍其中最基本、最常用的参数。 gcc最基本的用法是gcc options filenames A)#include <>B)#include “myinc.h” 其中,A类使用尖括号(< >),B类使用双引号(“ ”)。对于A类,预处理程序cpp在系统预设包含文件目录(如/usr/i
7、nclude)中搜寻相应的文件,而对于B类,cpp在当前目录中搜寻头文件,这个选项的作用是告诉cpp,如果在当前目录中没有找到需要的文件,就到指定的dirname目录中去寻找。在程序设计中,如果我们需要的这种包含文件分别分布在不同的目录中,就需要逐个使用-I选项给出搜索路径。 -Ldirname,将dirname所指出的目录加入到程序函数库文件的目录列表中,是在连接过程中使用的参数。在预设状态下,连接程序ld在系统的预设路径中(如/usr/lib)寻找所需要的函数库文件,这个选项告诉连接程序,首先到-L指定的目录中去寻找,然后到系统预设路径中寻找,如果函数库存放在多个目录下,就需要依次使用这个
8、选项,给出相应的存放目录。 -lname,在连接时,装载名字为“libname.a”的函数库,该函数库位于系统预设的目录或者由-L选项确定的目录下。例如,-lm表示连接名为“libm.a”的数学函数库。 上面我们简要介绍了gcc编译器最常用的功能和主要参数选项,更为详尽的资料可以参看Linux系统的联机帮助。 假定我们有一个程序名为test.c的C语言源代码文件,要生成一个可执行文件,最简单的办法就是 gcc test.c 这时,预编译、编译连接一次完成,生成一个系统预设的名为a.out的可执行文件,对于稍为复杂的情况,比如有多个源代码文件、需要连接函数库或者有其他比较特别的要求,就要给定适当
9、的调用选项参数。再看一个简单的例子。 整个源代码程序由两个文件testmain.c 和testsub.c组成,程序中使用了系统提供的数学库,同时希望给出的可执行文件为test,这时的编译命令可以是 gcc testmain.c testsub.c -lm -o test 其中,-lm表示连接系统的数学库libm.a。 然后执行:#./test(注意:test前面要加入./)3. gcc的错误类型及对策 gcc编译器如果发现源程序中有错误,就无法继续进行,也无法生成最终的可执行文件。为了便于修改,gcc给出错误信息,我们必须对这些错误信息逐个进行分析、处理,并修改相应的语言,才能保证源代码的正确
10、编译连接。gcc给出的错误信息一般可以分为四大类,下面我们分别讨论其产生的原因和对策。 第一类C语法错误 错误信息文件source.c中第n行有语法错误(syntex errror)。这种类型的错误,一般都是C语言的语法错误,应该仔细检查源代码文件中第n行及该行之前的程序,有时也需要对该文件所包含的头文件进行检查。有些情况下,一个很简单的语法错误,gcc会给出一大堆错误,我们最主要的是要保持清醒的头脑,不要被其吓倒,必要的时候再参考一下C语言的基本教材。 第二类头文件错误 错误信息找不到头文件head.h(Can not find include file head.h)。这类错误是源代码文件
11、中的包含头文件有问题,可能的原因有头文件名错误、指定的头文件所在目录名错误等,也可能是错误地使用了双引号和尖括号。 第三类函数库错误 错误信息连接程序找不到所需的函数库,例如 ld: -lm: No such file or directory 这类错误是与目标文件相连接的函数库有错误,可能的原因是函数库名错误、指定的函数库所在目录名称错误等,检查的方法是使用find命令在可能的目录中寻找相应的函数库名,确定函数库及目录的名称并修改程序中及编译选项中的名称。 第四类未定义符号 错误信息有未定义的符号(Undefined symbol)。这类错误是在连接过程中出现的,可能有两种原因一是使用者自己
12、定义的函数或者全局变量所在源代码文件,没有被编译、连接,或者干脆还没有定义,这需要使用者根据实际情况修改源程序,给出全局变量或者函数的定义体;二是未定义的符号是一个标准的库函数,在源程序中使用了该库函数,而连接过程中还没有给定相应的函数库的名称,或者是该函数库的目录名称有问题,这时需要使用函数库维护命令ar检查我们需要的库函数到底位于哪一个函数库中,确定之后,修改gcc连接选项中的-l和-L项。 排除编译、连接过程中的错误,应该说这只是程序设计中最简单、最基本的一个步骤,可以说只是开了个头。这个过程中的错误,只是我们在使用C语言描述一个算法中所产生的错误,是比较容易排除的。我们写一个程序,到编
13、译、连接通过为止,应该说刚刚开始,程序在运行过程中所出现的问题,是算法设计有问题,说得更玄点是对问题的认识和理解不够,还需要更加深入地测试、调试和修改。一个程序,稍为复杂的程序,往往要经过多次的编译、连接和测试、修改。下面我们学习的程序维护、调试工具和版本维护就是在程序调试、测试过程中使用的,用来解决调测阶段所出现的问题。2. 进程与线程管理(设计性)姓名: 学号.: 班级: 得分:2.1 实验目的1了解Linux进程2掌握Linux下的C编程和GCC的使用3了解Linux下进程的创建和终止2.2 实验内容1 练习教材附录实验4中的内容(p296-306)2 编译、运行补充材料中的child.
14、c3修改child.c,让父进程等待子进程退出 4修改child.c,让父进程杀死子进程2.3 评分标准大类明细打分1.程序功能(40)(1)完成实验内容1(10),实验内容2(10),实验内容3(10),实验内容4(10)2.程序质量(30%)(1)用大括号和缩进来清楚地显示程序结构。(提示:按一次"tab"键产生一个缩进)(5)(2)各函数有功能说明和参数说明(5)(3)每个源程序文件都有说明(比如本程序功能,作者,包含哪些函数)(5)(4)每个函数长度不超过100行(5)(5)函数、变量取名前后一致并容易理解(5)(6)对不容易理解的常量、变量和语句有注释(比如全局常
15、量、变量、if语句)(5)3.回答问题(30%)回答教材p306上的“练习和思考”问题2.4 补充材料1. 创建进程 fork系统调用fork调用创建一个新进程。新的进程或者说子进程是调用进程或者说父进程的副本。如果fork执行成功,就向父进程返回子进程的PID,并向子进程返回0。这意味着你只调用fork一次,它也返回两次。fork创建的新进程是和父进程一样的副本,包括真实和有效UID和GID、进程组和会话ID、环境、资源限制、打开的文件以及共享内存段。如下是一个使用fork的简单示例程序。/* child.c */#include <unistd.h>#include <s
16、tdio.h>#include <stdlib.h>int main(void)pid_t child;if(child=fork()=-1)perror("fork");exit(EXIT_FAILURE);else if(child=0)puts("in child");printf("tchild pid = %dn",getpid();printf("t child ppid = %dn",getppid();exit(EXIT_SUCCESS);elseputs("in par
17、ent");printf("t parent pid = %dn",getpid();printf("t parent ppid = %dn",getppid();exit(EXIT_SUCCESS);用gcc编译该程序然后运行。其他函数还有system,exec族调用2 等待进程使用wait或waitpid函数可以收集子进程的退出状态。它们的原形如下:#include <sys/wait.h>#include <sys/types.h>pid_t wait(int *status);进程一旦调用了wait,就立即阻塞自
18、己,由wait自动分析是否当前进程的某个子进程已经退出,如果让它找到了这样一个已经变成僵尸的子进程,wait就会收集这个子进程的信息,并把它彻底销毁后返回;如果没有找到这样一个子进程,wait就会一直阻塞在这里,直到有一个出现为止。 参数status用来保存被收集进程退出时的一些状态,它是一个指向int类型的指针。但如果我们对这个子进程是如何死掉的毫不在意,只想把这个僵尸进程消灭掉,(事实上绝大多数情况下,我们都会这样想),我们就可以设定这个参数为NULL,就象下面这样: pid = wait(NULL); 如果成功,wait会返回被收集的子进程的进程ID,如果调用进程没有子进程,调用就会失败
19、,此时wait返回-1,同时errno被置为ECHILD。其他函数还有waitpid,wait33. 杀死进程一个进程由于以下5个原因中的一个而终止。它的main函数调用了return。它调用了exit 在<stdlib.h>中声明。它调用了_exit 在<unistd.h>中声明。它调用了abort 在<stdlib.h>中声明。它被一个信号终止,如#include <signal.h>#include <sys/types.h>kill(pid, SIGKILL);3. 进程间通信(IPC)(设计性)姓名: 学号.: 班级: 得分
20、:3.1 实验目的1了解和熟悉消息通信机制2了解和熟悉共享存储区机制3.2 实验内容1修改教材附录实验7中实验内容1的程序,使之可以运行2修改教材附录实验7中实验内容2的程序,使得服务器能收到客户机发送的”hello server”3.3 评分标准大类明细打分1.程序功能(40)(1)完成实验内容1(20),实验内容2(20)2.程序质量(30%)(1)用大括号和缩进来清楚地显示程序结构。(提示:按一次"tab"键产生一个缩进)(5)(2)各函数有功能说明和参数说明(5)(3)每个源程序文件都有说明(比如本程序功能,作者,包含哪些函数)(5)(4)每个函数长度不超过100行
21、(5)(5)函数、变量取名前后一致并容易理解(5)(6)对不容易理解的常量、变量和语句有注释(比如全局常量、变量、if语句)(5)3.回答问题(30%)1函数msgget和msgrcv的功能及其参数的含义是什么? 2在实验内容1的程序中,服务器收到消息的顺序是怎样的?4. 文件系统(验证性)姓名: 学号.: 班级: 得分:4.1 实验目的1了解Linux文件管理的概念,包括常用命令、文件类型等2了解Linux中文件系统的加载和卸载方法4.2 实验内容1. 运行教材附录实验3中文件操作常用命令2. 了解Linux文件系统的安装和卸载,假如Windows是fat32格式,那么可以通过以下操作访问:
22、Step 1: 首先用fdisk -l 查看硬盘情况或者通过点击Main Menu->System Tools->Hardware Browser访问硬盘信息知道要访问的分区对应的设备名,比如是hda1 Step 2: 假如要访问hda1, 那么执行“mount -t vfat /dev/hda1 /mnt/c”。4.3 评分标准大类明细打分1.回答问题(80%)1在当前目录下,以自己的姓名拼音为目录名建立一个目录,然后进入到这个目录下,建立一个exp.c文件,然后查看这个文件的权限,并修改其权限为-rwxrwxrwx,然后查看这个文件中的内容,最后删除这个文件,再退到上一级目录,
23、删除自己建立的目录,请写出整个操作的命令步骤? 2加载软盘和卸载软盘的命令步骤是怎样的 2实验过程中遇到的问题及解决方法(20)5. 设备驱动程序(设计性)姓名: 学号.: 班级: 得分:5.1 实验目的了解Linux设备驱动程序的编写5.2 实验内容2编译drv_module.c gcc c drv_module.c -I /usr/src/linux-uname -r/include3加载模块 insmod drv_module.o, 如果安装成功,在/proc/devices文件中就可以看到设备test, 并可以看到它的主设备号4创建设备文件 mknod /dev/test c majo
24、r minor从设备号设置成0就可以,如: mknod /dev/test c 254 05通过编译运行test_drv.c,测试drv_module5.3 评分标准大类明细打分1.程序功能(50)(1)完成实验内容1(10),实验内容2(10),实验内容3(10),实验内容4(10),实验内容5(10)2.程序质量(30%)(1)用大括号和缩进来清楚地显示程序结构。(提示:按一次"tab"键产生一个缩进)(5)(2)各函数有功能说明和参数说明(5)(3)每个源程序文件都有说明(比如本程序功能,作者,包含哪些函数)(5)(4)每个函数长度不超过100行(5)(5)函数、变量
25、取名前后一致并容易理解(5)(6)对不容易理解的常量、变量和语句有注释(比如全局常量、变量、if语句)(5)3.回答问题(20%)1编译运行test_drv.c的结果是什么? 2在/usr/src目录树中哪个文件包含file_operations 结构的定义5.4 补充材料/*drv_module.c*/#define MODULE /or use -D MODULE in the compiling#define _KERNEL_ /or use -D _KERNEL_ in the compiling#include <linux/kernel.h> #include <
26、linux/module.h>#include <linux/fs.h>#include <asm/uaccess.h>unsigned int test_major = 0; ssize_t read_test(struct file *file, char *buf, size_t count, loff_t *f_ops) int left; if (verify_area(VERIFY_WRITE, buf, count) = -EFAULT ) return -EFAULT; for(left = count ; left > 0 ; left-)
27、 _put_user(1, buf); buf+; return count; ssize_t write_test(struct file *file, char *buf,size_t count, loff_t *f_ops) return count; static int open_test(struct inode *inode,struct file *file ) MOD_INC_USE_COUNT; return 0; static int release_test(struct inode *inode,struct file *file ) MOD_DEC_USE_COU
28、NT; return 0; struct file_operations test_fops = read:read_test, write:write_test,open:open_test, release:release_test;int init_module() /similar to main() in user spaceint result; result = register_chrdev(0, "test", &test_fops); if (result < 0) printk(KERN_INFO "test: cant get
29、 major numbern"); return result; if (test_major = 0) test_major = result; /* dynamic */ return 0;/successvoid cleanup_module() /which is called when rmmod printk("This kernel module has been removed.n");MODULE_LICENSE("GPL");/*test_drv.c*/#include <stdio.h> #include &l
30、t;fcntl.h> main() int testdev; int i; char buf10; testdev = open("/dev/test", O_RDWR); if ( testdev = -1 ) printf("Cannt open file n"); exit(0); read(testdev, buf, 10); for (i = 0; i < 10;i+) printf("%dn", bufi); close(testdev); 6. Linux中的服务器搭建(验证性)姓名: 学号.: 班级: 得分
31、:6.1 实验目的1了解Linux下FTP服务器的构建6.2 实验内容1配置网卡接口IP地址和默认网关。wu-ftpd-到/home目录下。3. 进入/home目录,使用命令rpm ivh wu-ftpd-4修改文件/etc/xinetd.d/wu-ftpd,然后执行命令/etc/rc.d/init.d/xinetd reload使修改生效。5. 修改ftp配置文件/etc/ftpaccess和/etc/ftpusers。6. 创建一个用户(用命令adduser)并为其设置密码(用命令passwd)。useradd -d /home/realuser ftp1 /新建ftp1 用户,并设定其目
32、录为/home/realuser7. 用新建用户名登录FTP服务器。:密码IP。6.3 评分标准大类明细打分1.回答问题(80%)1如何阻止一个用户登录ftp服务器? 2如何限制新建用户权限为只读?2实验过程中遇到的问题及解决方法(20)6.4 补充材料 - wu-ftpd服务器配置手册摘录1配置网卡接口IP地址,默认网关为了防止IP地址冲突,首先进入到Windows系统的命令行窗口,用命令:ipconfig /all查看当前计算机的IP、掩码、网关、DNS地址。切换到Linux系统,配置DNS服务器地址,方法为打开文件/etc/resolv.conf,在文件最后加上一行:nameserver
33、 DNS地址。配置接口地址:ifconfig eth0 <IP> broadcast <广播地址> netmask <掩码>如:配置网关:route add net 0/32 gw <网关>如:#route add -net 2. 修改文件/etc/xinetd.d/wu-ftpd检查文件/etc/xinetd.d/wu-ftpd的内容,用vi打开此文件。service ftpdisable =yes <- 这个如果是yes,请改为nosocket_type =stream <-以下内容保持不变wait = no。最后不要忘记用命令/
34、etc/rc.d/init.d/xinetd reload使修改生效。3修改ftp配置文件/etc/ftpaccess和/etc/ftpusers 为了方便大家的理解,以下我们给出一个/etc/ftpaccess的配置实例和详细解释:loginfails 3 /*用户登录到FTP服务器时,允许用户输错密码的次数*/guestuser * /*所有人都是访客用户,访客用户的权限比真实用户少*/realuser dlg /*设置dlg是真实用户*/class local real * /*定义一个名为local的类,它包含了在任何地方登录(*代表所有IP地址)的real用户*/class remote anonymous guest * /* 定义一个名为remote的类,它包含了在任何地方登录的anonymous用户和guest用户,匿名用户进入系统后缺省位于/var/ftp
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 大型企业人力资源部经理招聘流程解析
- 企业集团内部审计实施与技巧
- 京东零售市场分析面试精讲
- 交通物流领域调度员岗位面试全解析
- 体育产业赛事策划与执行全流程详解
- 数据驱动企业运营的秘诀:如何应对数据中台经理面试
- 2026年高考生物细胞结构示意图解析试题
- 2026年信息技术在医疗领域应用前景讲座试题
- 社交自媒体时代的演讲稿
- 把青春留给时间演讲稿
- 2025至2030中国在线教育平台用户行为付费意愿及商业模式优化分析报告
- 2026年上海市初三上学期语文一模试题汇编之现代文阅读试题和参考答案
- 2025年半导体行业薪酬报告-
- 2026年《必背60题》车辆工程专业26届考研复试高频面试题包含详细解答
- 机械臂安全事故培训课件
- 混凝土地坪施工组织设计方案
- 2026年高考语文备考之18道病句修改专练含答案
- 2026年江西科技学院单招职业技能测试题库附答案详解
- 质量文化建设的重要性
- 中信建投笔试题库及答案
- 2026年江苏航空职业技术学院单招综合素质考试必刷测试卷必考题
评论
0/150
提交评论