linux网络操作系统大作业
《Linux系统管理与服务配置》大作业

《Linux系统管理与服务配置》大作业背景描述无论从硬件还是从软件上来讲,Linux操作系统都已经是一个非常成熟的操作系统,由于其免费、开源的特性使得Linux对Windows的威胁也越来越大。
在服务器和嵌入式系统市场上,Linux已经是主流的操作系统之一,现在Linux正稳步拓展桌面操作系统市场。
Linux网络服务功能非常强大,在Linux上可以部署Web Server、DNS Server、Mail Server、DB Server、FTP server等等,但是也由此产生了很多网络问题。
据统计,在Linux系统下产生的故障有60%来自网络方面,40%来自系统本身,课件熟练解决LInux下故障,对于熟练掌握Linux 系统有着巨大的帮助,请学生列出Linux系统下常见的故障与处理方法。
要求:1.要求从网络硬件传输故障(网线、路由器、交换机等)、网卡故障、网络服务故障等方面进行展开。
2.字数不少于1500字。
作业格式要求:(1)以A4纸张作(2)论文格式如下:论文标题用小二号字,宋体,加粗1 一级标题,用小三号黑体,加粗,并留出上下间距为:段前0.5行,段后0.5行)1.1 ××××××(作为正文2级标题,用小4号黑体,加粗)×××××××××(小4号宋体)××××××…………1.1.1 ××××(作为正文3级标题,用小4号黑体,不加粗)×××××××××(小4号宋体,行距1.5倍)××××××××教师姓名:李茂林联系方式:邮箱:截止日期:5月27日前将完成的作业发至指定邮箱。
linux大作业

仲恺农业工程学院Linux课程大作业报告院(系):信息科学与技术学院专业班级:计算机学号:姓名:目录1 简述题目 (1)2 shell程序设计 (5)2.1 程序设计要求 (5)2.2 程序设计内容 (5)1 (5)2 (10)3 (11)5 (13)6 (16)3 文件和目录部分 (17)3.1 程序设计要求 (17)3.2 程序设计内容 (17)2 (17)3 (17)6 (18)8 (19)9 (19)4 进程和信号部分 (20)4.1 程序设计要求 (20)4.2 程序设计内容 (20)1 (20)2 (21)8 (22)9 (23)10 (24)5 网络编程部分 (25)5.1 程序设计要求 (25)5.2 程序设计内容 (25)2 (25)3 (26)1 简述题目1、makefile文件的作用是什么,makefile文件中有一种变量,其值是根据具体的规则来确定的,称为自动变量,其中代表所有依赖文件列表的是哪个;举例说明make命令的工作流程。
答:(1)makefile的作用就是使得源文件修改的时候,能很快地自动编译和链接所有修改过的文件。
Make工具可将编译和链接的步骤按一定的规则写入文本文件。
(2)是指冒号后面的那一列(3)举例:现在有lib.h,lib.c,mod.c,app.h,app.c,main.c文件,编译链接成main.o程序示例:#script5-2_makefileAppexam:main.o app.o mod.o lib.ogcc –o apexam main.o app.o mod.o lib.omain.o:main.c app.hgcc –c main.capp.o:app.c app.hgcc –c app.cmod.o:mod.cgcc –c mod.clib.o:lib.c lib.hgcc –c lib.cclean:rm –f *.o2、什么是进程,用fork()创建一个子进程时,系统会做什么工作。
《linux网络操作系统》上机考试试题

《Linux网络操作系统》上机考试试卷班级:姓名:学号:实验之前先把镜像包复制到D盘根目录下,备份以防修改配置。
题目1:构建虚拟网络环境,配置网络接口,安装DHCP服务器并实现其功能,最后测试验证DHCP效果。
实训报告要求:1.书写十个步骤的命令集合及在命令后面解释每个命令的含义. 2每个步骤的小窗口截图,不要全屏截图。
考试步骤:1 用命令安装DHCP服务器(需要构建网桥模式连接外网,网关192.168.0.254,DNS:58.20.127.238)。
2 在虚拟机环境中构建2台主机,并联网。
3 通过配置etc/network/interfaces文件来实现网络接口的配置,要求eth0接口为服务器物理接口,Eth1为客户端接口。
两个接口在同一网段,192.168.*.0(*为学生本人学号)。
4 用命令启动DHCP服务。
5 配置/etc/default/dhcp3-server配置文件6 配置/etc/dhcp/dhcpd.conf配置文件,实现主配置7 重启DHCP服务8 重启网络9 测试DHCP功能10 查看eth1网络接口信息,看其是否能通过DHCP服务器获取正常的IP地址。
谣言:吃太咸了会得病?导语:“人体每日摄入食盐不应过多,否则易患多种疾病。
”这是真的吗?吃太咸了会得病?一、网友评论:1、网友:冰冰23 岁行政助理我就是一个”重口味“的人,但身体很健康啊!我就是一个特别爱吃咸的人,什么咸菜、咸烧饼都是我的最爱。
大家都说吃太咸对身体不好,可我一点没这么觉得。
前几天我还到医院去体检,各项指标都很正常。
吃咸不会得病的!2、网友:小帅34岁销售邻居家大爷常年吃太咸,结果得了心血管病。
邻居家有个大爷经常吃咸的东西,大家都劝他不要吃这么咸,可他就是不听。
后来他被检查出了心血管疾病,我想这和常年吃咸有很到关系。
世界卫生组织建议每人每天钠盐摄入量不超过5克二、专家解答:1、世界卫生组织建议每人每天钠盐摄入量不超过5克。
linux大作业及要求

一、为企业架设web服务器,要求:1.建立WEB服务器,服务器名为,网站主目录为/var/xx/www,站点主页文件的搜索顺序为index.html index.php;服务器启动时的子进程数为5;使用端口为80。
网页内容为:班级名称,用户名,192.168.yy.12,2.每个同学为自己建立个人主页空间,在/home下对自己做限额,软配额限制15M,硬配额限制60M, i节点数不受限制。
每个同学都属于gp组,组的限额是用户限额的50倍。
网页内容为:学号,用户名,192.168.yy.12,/home/用户名/www 其中:XX为同学名字的最后一个字的拼音,yy为同学学号的后两位数字,十位为0的只取个位数字。
评分标准:1. 正确安装DNS和apache并配置地址。
(10分)2. 正确配置dns,添加主机记录,并能够正常解析的。
(30分)3. 正确配置站点,建立主页,建立用户及个人主页,并能正常访问。
(30分)4. 正确设置配额。
(20分)5. 将配置及测试过程整理成文档,格式规范,步骤完整、图表清晰。
(10分)二、为企业架设ftp服务器1.建立FTP服务器,服务器名字为,服务器的欢迎语为“welcometo login ftpserver”.允许匿名用户上传下载文件,匿名用户的根目录为/var/ftp/pub,匿名用户的最大传输速率为10Kb/s.2.为自己和自己前后相邻的两个同学建立账户(只有一个相邻的,就建立一个),账户名字为姓名的全拼,允许本地用户访问,禁止相邻两个同学的账号切换到主目录以外的目录。
3.对/home做磁盘限额,用户的软配额限制15M,硬配额限制60M, i节点数不受限制。
每个同学都属于gp组,组的限额是用户限额的50倍。
4.将windows主机的一个txt文件上传到ftp服务器,文档的内容为:姓名,学号,windows主机ip,192.168.yy.13.其中:XX为同学名字的最后一个字的拼音,yy为同学学号的后两位数字,十位为0的只取个位数字。
《LINUX网络操作系统》试题及其答案

最新资料,word文档,可以自由编辑!!精品文档下载【本页是封面,下载后可以删除!】广州工程技术职业学院信息工程(系)院( 2009--2010 学年第 2 学期)《LINUX 操作系统》期末考试复习题理论部分 :一、单项选择题:1. Linux 的创始人是谁( D )A 、 TurbolinuxB 、AT&T Bell LaboratryC 、University of HelsinkiD 、 Linus Torvalds2. 在 Linux 中,命令解释器是哪个( D )A 、管道B 、分级文件系统C 、字符型处理器D shell3. Linux 安装程序提供了两个引导装载程序A GROU 和 LLTOB 、DIR 和 COID4. 如果当前目录是 /home/sea/china ,那么“ china ”的父目录是哪个目录( A )A 、 /home/seaB 、 /home/C 、 /D 、 /sea5. 在 Linux 中,要删除 abc 目录及其全部内容的命令为: ( B )A 、 rm abcB 、 rm -r abcC 、 rmdir abcD 、 rmdir -r abc6. 在 Linux 环境下,能实现域名解析的功能软件模块是:( C )A 、 apacheB 、 dhcpdC 、 BIND D 、 SQUID7.创建的辅助DNS 服务器无法获得主 DNS 区域信息,哪种方法可以解决(D )A 、重新启动主DNS 服务器B 手动从主DNS 服务器复制区域文件到辅助 DNS 服务器C 重新启动辅助DNS 服务器D 在主DNS 服务器中利用allow-transfer命令设置“允许区域复制” &假定kernel 支持vfat 分区,下面哪一个操作是将 /dev/hda1,一个Windows 分区加载到 /win 目录 ?( D )A 、 mount -t windows /win /dev/hda1B 、 mount -fs=msdos /dev/hda1 /winC 、 mount -s win /dev/hda1 /winD 、 mount — t vfat /dev/hda1 /win 9. 显示用户的主目录的命令是什么( A )A 、 echo $HOMEB 、 echo $USERDIRC 、 echo $ECHOD 、 echo $ENV10.系统中有用户 user1 和 user2 ,同属于 users 组。
操作系统大作业

操作系统大作业随着计算机技术的飞速发展,操作系统已成为计算机系统中的核心部分。
它负责管理系统的资源,确保所有程序能够正常运行。
本文将介绍操作系统的大作业,包括其功能、发展历程、现状以及未来发展趋势。
操作系统的主要功能包括:管理系统的硬件资源,如CPU、内存、硬盘等;管理系统的软件资源,如文件、网络等;提供用户界面,方便用户使用计算机。
操作系统的发展可以分为三个阶段:人工操作阶段、脱机作业阶段和操作系统阶段。
在人工操作阶段,用户需要自己管理计算机的资源,这不仅效率低下,而且容易出现错误。
随着计算机技术的发展,出现了脱机作业系统,用户可以通过脱机作业系统将作业提交给计算机,从而提高了效率。
随着计算机技术的进一步发展,出现了操作系统,它可以自动管理计算机的资源,大大提高了计算机的效率。
目前,市场上的操作系统种类繁多,如Windows、Linux、MacOS等。
这些操作系统都有各自的特点和优势。
例如,Windows以其易用性和稳定性赢得了大量用户,而Linux则以其安全性和可定制性受到了一些专业用户的青睐。
随着计算机技术的不断发展,未来的操作系统将更加智能化和个性化。
例如,技术将被广泛应用于操作系统中,使得操作系统能够更好地理解用户的需求并提供更好的服务。
操作系统也将更加个性化,能够根据用户的使用习惯和偏好来调整自己的行为,提高用户的使用体验。
操作系统作为计算机系统的核心部分,其重要性不言而喻。
通过了解操作系统的功能和发展历程,我们可以更好地理解计算机技术的发展趋势。
我们也应该操作系统的未来发展,以期能够更好地利用计算机技术来服务人类社会。
随着计算机技术的飞速发展,操作系统已经成为计算机系统中不可或缺的一部分。
了解和学习操作系统的原理和设计方法,对于我们更好地理解和使用计算机具有重要的意义。
本次作业的目的是深入理解和掌握操作系统的基本原理和设计方法,通过分析和研究经典操作系统的实例,进一步加深对操作系统原理的理解和应用。
linux操作原理系统大题汇总
处理机管理1.请回答下列问题:(1)该系统采用了怎样的进程调度算法?说明理由。
(2)把图中发生①-④的状态变化原因填入下表中。
2.设某系统采用可抢占的优先级进程调度算法,系统在某一段时间内有A 、B 、C 三个进程,进程C 优先级最高,进程A 优先级最低,进程B 优先级介于进程A 、C 之间,它们的就绪时刻、计算与I/O 所需时间如下表所示:(1给出三个进程的实际运行过程(忽略进行系统调度所需时间)。
(2)采用多道方式运行比采用单道方式运行节省多少时间。
3.设某系统采用可抢占的优先级进程调度算法,在系统的就绪队列中有X 、Y 、Z 三个进程,进程Z 优先级最高,进程X 优先级最低,进程Y 优先级介于进程X 、Z 之间,它们的计算与I/O 所需时间如下表所示:(1给出三个进程的实际运行过程(忽略进行系统调度所需时间)。
(2)采用多道方式运行比采用单道方式运行节省多少时间。
答案 1、【参考答案】(1)该系统采用的是“时间片轮转调度算法”。
该调度算法让就绪进程按就绪的先后次序排成队列,每次总是选择就绪队列中的第一个进程占用处理器,但规定只能使用一个“时间片”。
如果一个时间片用完,进程工作尚未结束,则它也必须让出处理器而被重新排到就绪队列的末尾,等待再次运行,当再次轮到运行时,重新开始使用一个新的时间片。
这样,就绪队列中的进程就依次轮流地占用处理器运③行。
(2)2、(1)若系统采用多道方式运行,这三个进程运行完成总共所需的时间为68ms。
(图示略)(2)采用单道方式运行,这三个进程运行完成总共所需的时间为113ms采用多道方式运行比采用单道方式运行节省时间:113-68=45ms3、【参考答案】(1)若系统采用多道方式运行,这三个进程运行完成总共所需的时间为68ms。
(图示略)(2)采用单道方式运行,这三个进程运行完成总共所需的时间为113ms采用多道方式运行比采用单道方式运行节省时间:113-68=45ms存储器管理1.有一128行、128列的整数数组A在系统中按行存放。
linux大作业
学号:姓名:班级:
大作业任务要求:
一、Shell编程要求:写出两个Shell程序,每个程序不少于十五行;说明程序主要功能;每行给出注释。
二、Linux操作系统配置实例要求:查阅资料结合实际使用情况,写出Linux操作系统使用中的一个配置的详细过程;具体配置目标不限(自选)。
三、Linux操作系统应用开发实例要求:编写Linux下的一个应用程序。
开发语言和工具不限;给出源代码和运行结果。
关键代码部分要给出注释。
四、Linux内核源码解读
要求:任选Linux内核源码,写出该模块运行过程;在每行内核源码后注释说明;解读源码不少于三十行。
收到的大作业内容不能雷同。
linux 学习练习题
linux 学习练习题Linux 是一种广泛应用的开源操作系统,其功能强大、稳定可靠,成为了许多企业和个人的首选。
为了提高对 Linux 的熟练程度,以下是一些适用于不同水平的学习练习题。
练习题 1:Linux 基础知识1.1 什么是 Linux 操作系统?它与其他操作系统有什么不同之处?1.2 Linux 中包含哪些常见的文件系统?1.3 如何在 Linux 中创建新的用户账户?1.4 描述 Linux 中的文件权限,包括如何查看和更改文件权限。
1.5 解释 Linux 中的环境变量是什么,并提供一个设置新环境变量的示例。
练习题 2:Linux 文件和目录管理2.1 如何在 Linux 中创建一个新的目录?如何删除一个目录?2.2 列出当前目录下的所有文件和子目录。
2.3 如何将文件从一个目录复制到另一个目录?如何移动文件到另一个目录?2.4 如何重命名文件或目录?2.5 如何递归地查找特定类型的文件并将其复制到另一个目录?练习题 3:Linux 进程管理3.1 描述进程的概念以及 Linux 中的进程控制命令。
3.2 如何查看当前正在运行的进程?3.3 如何杀死一个正在运行的进程?3.4 解释进程优先级和 nice 值之间的关系。
3.5 如何将一个进程置于后台运行?练习题 4:Linux 网络管理4.1 如何查看 Linux 中的网络接口和 IP 地址?4.2 如何配置静态 IP 地址?4.3 如何测试网络连接以及如何在 Linux 中执行网络诊断?4.4 如何设置和管理防火墙规则?4.5 如何在 Linux 中配置和使用 VPN?练习题 5:Linux 软件包管理5.1 描述 Linux 中软件包管理的优势。
5.2 如何在 Ubuntu 和 CentOS 系统上分别使用 apt 和 yum 安装软件包?5.3 如何卸载已安装的软件包?5.4 如何更新已安装的软件包?5.5 如何在 Linux 中搜索软件包?练习题 6:Linux Shell 脚本编程6.1 什么是 Shell 脚本?它有什么作用?6.2 如何创建一个简单的 Shell 脚本文件?6.3 描述如何在脚本中定义变量和使用变量。
操作系统大作业--Linux文件管理系统
华南理工大学软件学院2013级操作系统大作业实验报告课程名称:操作系统任课老师:作业题目:简单二级文件系统班级:学生姓名:学号:目录一、实验目的通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能及内部实现。
二、实验环境操作系统:Ubuntu 12.04 (Ubuntu/Linaro 4.6.3-1ubuntu5) 编译器: gcc 4.6.3语言:C语言三、实验内容FMSV1.0系统模拟了原生的文件系统,使用文本来当作磁盘,并使用了空闲块记录表,目录,i-node等数据结构来辅助文件系统的运作。
磁盘:一个名为blockDisk的文件,里面含有256个数据块。
每个数据块的长度为1024,可存储1024个字符。
I节点:包含文件名,文件保护码,文件长度,文件存放位置。
目录:一个链表,记录了i节点。
空闲块记录表FBT:用于记录磁盘块使用情况,0表示未使用,1表示使用。
数据块:保存了文件的数据,一个数据块至多存放一个文件。
数据块使用情况:用于记录文件使用数据块的情况。
存放在I 节点的fat数组中。
文件:一个文件最多占用两个数据块,即长度至多为4028.FMSV1.0系统支持的命令行:login:登录register:注册open:打开文件read:读取文件数据到屏幕write:写文件,分为cover和append两种类型;cover是覆盖原数据,append是在不改变原始数据的基础上进行增加。
close:关闭文件create:新增文件delete:删除文件exit:退出程序help:帮助四、程序中使用的数据结构及符号说明/*---------------结构定义-----------------*//*---------用户--------*/typedef struct user{char account[15]; //账户最长为10char password[15]; //密码最长为10,多出来的是为了方便运算}user;/*--------数据节点--------*/typedef struct datanode //用于记录文件数据保存在哪个数据块的哪个范围{int num; //数据块号int begin; //数据开始位置int end; //数据结束位置}datanode;/*-------i节点--------*/typedef struct inode{Char filename[30];Int num;char code[30]; //保护码int size;datanode fat[MAX_DATANODE_NUM];int node _num;}inode;typedef struct dirEntry //用链表来记录I节点{inode ind;struct dirEntry *next;}dirEntry;/*-------数据块--------*/typedef struct block{char content[MAX_BLOCK_SIZE]; //数据块内容最大长度为1025,预留最后一位用来存储’\0’,int num;int offset; //记录当前数据的数量}block;五、源程序及注释head.h头文件#include<string.h>#include<stdio.h>#include<stdlib.h>#include<stdbool.h>#define MAX_BLOCKS_NUM 256 //最大数据块数量是256,则数据块总大小是256KB#define MAX_BLOCK_SIZE 1025 //数据块数据容量,一个数据块的大小是1KB,最有1位用来存储'\0',表示字符串结尾!#define MAX_DATANODE_NUM 2 //每个文件最多占用的数据块的数量#define MAX_INODE_NUM 512 //i节点的最大数目,亦即系统允许容纳文件的最大数量#define MAX_CACHE_NUM 32 //允许缓存的最大数据块数量为32个数据块,缓存为32KB/*---------------结构定义-----------------*//*---------用户--------*/typedef struct user{char account[15]; //账户最长为10char password[15]; //密码最长为10,多出来的是为了方便运算}user;/*--------数据节点--------*/typedef struct datanode //用于记录文件数据保存在哪个数据块的哪个范围{int num; //数据块号int begin; //数据开始位置int end; //数据结束位置}datanode;/*-------i节点--------*/typedef struct inode{char filename[30];int num;char code[30]; //保护码int size;datanode fat[MAX_DATANODE_NUM];int node_num;}inode;typedef struct dirEntry //用链表来记录I节点{inode ind;struct dirEntry *next;}dirEntry;/*-------数据块--------*/typedef struct block{char content[MAX_BLOCK_SIZE]; //数据块内容最大长度为1024int num;bool isRevised; //用于记录数据块是否进行数据修改int offset; //记录当前数据的数量}block;/*-------------定义全局变量-------------------*/int islogin = 0; //0 means thechar blockspath[30] = "userdata/blocksDISK.disk"; // 所有数据(即虚拟磁盘)地址char userspath[30] = "userdata/";static user currUser; //当前用户static dirEntry *DIR;static int curr_inode_num = 0; //当前i节点数量,亦即文件数量static block *cache;int max_node = 0; //最大的inode编号static int FBT[MAX_BLOCKS_NUM];static char *dirpath;static char fbtpath[30] = "userdata/FBT.disk";static dirEntry* selectEntry; //当selectEntry==NULL时,证明没有打开文件static dirEntry* currEntry;//命令行static char cm_help[10] = "help";static char cm_lg[10] = "login";static char cm_rg[10] = "register";static char cm_dir[10] = "dir"; static char cm_create[10] = "create"; static char cm_delete[10] = "delete"; static char cm_open[10] = "open"; static char cm_read[10] = "read"; static char cm_write[10] = "write"; static char cm_close[10] = "close"; static char cm_exit[10] = "exit"; static char cm_cancle[10] = "cancle";/*-------------函数声明---------------*/ void createStyle(int,char);void createWrap(int);int createSystem();int diskUpdate(block);void start();void getUser();int login();int regist();char lgOrRg();void createBlocksDisk();FILE* createDir();void initDir(char *);int getAction();void initFBT(); //初始化数据空闲块记录表int getCode();int getFreeBlock(bool);void saveDir();void saveBlock(block bk);void saveFBT();int createHelp(char *filename);dirEntry* delHelp(char *filename);void createDataDir();//响应指令的函数int LgRg(); //登录或注册void help();void dir();void create();void del();void open();void close();void read();void write();void coverHelp();void appendHelp();//Linux doesn't support the function strcmpi, so I need to finish it by myself.int strcmpi(char *p1, char *p2){if(strlen(p1)!=strlen(p2)){return -1;}int i;for(i=0; i<strlen(p1); i++){if(p1[i]!=p2[i]){return -1;}}return 0;}void createDataDir(){char *datapath = "userdata";printf("No dataDir !\nNow create it ...\n");if(mkdir(datapath,0777)){printf("Can not create DataDir ...\nPlease contact QQ878631510 for help...\nCrtl+C to exit.\n");while(1);}printf("Succeed creating dataDir !\n");}void showInode(inode ind)printf("num: %d\n",ind.num);printf("filename: %s\n",ind.filename); printf("size: %d\n",ind.size);}//界面美化函数void createStyle(int num, char style) {while(num--){printf("%c", style);}}void createWrap(int n){while(n--){printf("\n");}}//辅助函数char lgOrRg(){while(1){char com[10];printf("[login] or [register]: ");scanf("%s",com);if(!strcmpi(com,cm_lg)){return 'l';}if(!strcmp(com, cm_rg)){return 'r';}}}void help(){printf("欢迎您使用FMS文件系统模拟系统V1.0"); printf("以下是本系统支持的指令:\n");printf("exit : 退出\n");printf("help : 帮助\n");printf("dir : 查看目录中的所有文件\n");printf("create : 新建文件\n");printf("delete : 删除文件\n");printf("open : 打开文件\n");printf("read : 读文件(必须先打开文件)\n"); printf("write : 写文件(必须先打开文件)\n"); printf("close : 关闭文件\n");}void createBlocksDisk(){//初始化磁盘块FILE* fp = fopen(blockspath, "w");if(fp==NULL){printf("Can not create Disk !\nCtrl+C to quit\n");while(1);}else{int i, j;for(i=0; i<MAX_BLOCKS_NUM; i++){for(j=0; j<MAX_BLOCK_SIZE; j++){fputc('$',fp);}}fclose(fp);}FILE *p = fopen(fbtpath, "w");if(p==NULL){printf("FBT Created ERROR !\n");while(1);}else{int i;for(i = 0; i<MAX_BLOCKS_NUM; i++){FBT[i] = 0;fprintf(p," %d",0);}fclose(p);}}dirEntry* isInDir(char *filename){int i;dirEntry *pt = DIR;while(pt!=NULL){if(!strcmpi(pt->ind.filename, filename)){return pt;}pt = pt->next;}return NULL;}dirEntry* delHelp(char* filename){dirEntry* res = DIR;if(res==NULL){printf("No files !\n");return res;}if(res->next==NULL){if(!strcmpi(res->ind.filename,filename)){DIR = NULL;currEntry=NULL;printf("删除成功!\n");return res;}else{return NULL;}}if(!strcmpi(res->ind.filename,filename)){DIR = res->next;printf("删除成功!\n");return res;}while(res->next!=NULL){if(!strcmpi(res->next->ind.filename,filename)){dirEntry* r = res->next;res->next = r->next;printf("删除成功!\n");return r;}res = res->next;}printf("删除失败!\n");return NULL;}void coverHelp(){//释放原数据块,更新FBTint f;if(selectEntry->ind.size!=0) //要size>0 才会分配数据块{for(f=0; f<selectEntry->ind.node_num; f++){FBT[selectEntry->ind.fat[f].num]==0;}}char content[MAX_DATANODE_NUM][MAX_BLOCK_SIZE]; char tmp;inode ind;printf("End with '$'\n");int i = 0;while((tmp=getchar())!='$'){if(i==0&&tmp=='\n'){continue;}content[i/MAX_BLOCK_SIZE][i++] = tmp;}ind.size = i;//此时已经结束输入if(i>(MAX_BLOCK_SIZE-1)*MAX_DA TANODE_NUM) {printf("文件过大,无法存储,创建失败!\n");return;}int k;for(k=0; k<=i/(MAX_BLOCK_SIZE-1);k++){block bk;int bkn;for(bkn=0; bkn<MAX_BLOCK_SIZE-1; bkn++){bk.content[bkn]='$';}bk.content[MAX_BLOCK_SIZE-1]='\0';//printf("bk.content: %s\n", bk.content);char *tmp;int tp=0;int len=0;if(k==0){if(i<MAX_BLOCK_SIZE-1){len = i;}}if(k==1){len=i%(MAX_BLOCK_SIZE-1)+1; }for(tp=0; tp<len; tp++){bk.content[tp] = content[k][tp];}bk.isRevised = true;if(k==0){bk.num = getFreeBlock(false);}else{bk.num = getFreeBlock(true);if(bk.num==-1){printf("数据块已用完,内存不足!\n");return;}}saveBlock(bk);ind.fat[k].num = bk.num;ind.fat[k].begin = 0;ind.fat[k].end = len;}ind.node_num = k;strcpy(ind.code, selectEntry->ind.code);strcpy(ind.filename, selectEntry->ind.filename); ind.num = selectEntry->ind.node_num; selectEntry->ind = ind;saveDir();saveFBT();printf("文件已保存!\n");}void appendHelp(){ char tmp[MAX_BLOCK_SIZE*2];char ch;printf("End with '$':\n");int i = 0;while((ch=getchar())!='$'){if(i==0&&ch=='\n'){continue;}tmp[i++] = ch;}tmp[i]='\0';//此时已经完成输入if((i+selectEntry->ind.size)>(MAX_BLOCK_SIZE-1)*MAX_DA TANODE_NUM){printf("文件过大,无法存储,创建失败!\n");return;}else{if(selectEntry->ind.size>MAX_BLOCK_SIZE-1)//已经占用了两个block{int offset = selectEntry->ind.size - MAX_BLOCK_SIZE + 1;FILE* bfp = fopen(blockspath,"r+");if(bfp==NULL){printf("DISK ERROR !\nFrom appendFile ...\n");return;}else{fseek(bfp,(selectEntry->ind.fat[1].num*(MAX_BLOCK_SIZE-1) +offset),SEEK_SET);fwrite(tmp,sizeof(char),i,bfp);fclose(bfp);selectEntry->ind.size = selectEntry->ind.size + i;selectEntry->ind.fat[1].end = selectEntry->ind.fat[1].end + i;saveDir();printf("文件保存成功!\n");}}else //只占用了一个block{if(i<(MAX_BLOCK_SIZE-1-selectEntry->ind.size)) //不会占用新的block{FILE* bfp = fopen(blockspath,"r+");if(bfp==NULL){printf("DISK ERROR !\nFrom appendFile ...\n");return;}else{// if(selectEntry->ind.size==0)// {// fseek(bfp,0,SEEK_SET);// selectEntry->ind.fat[0] = 0;// }// else// {//fseek(bfp,(selectEntry->ind.fat[0].num*(MAX_BLOCK_SIZE-1) +selectEntry->ind.size),SEEK_SET);// }//printf("ftell = %l",ftell(bfp));fseek(bfp,(selectEntry->ind.fat[0].num*(MAX_BLOCK_SIZE-1) +selectEntry->ind.size),SEEK_SET);fwrite(tmp,sizeof(char),i,bfp);fclose(bfp);selectEntry->ind.size = selectEntry->ind.size + i;selectEntry->ind.fat[0].end = selectEntry->ind.fat[0].end + i;saveDir();printf("文件保存成功!\n");}}else //要占用新的block{int bkNum = getFreeBlock(true);if(bkNum==-1){printf("数据块已用完,内存不足!\n");return;}char *p1 = (char*)malloc((MAX_BLOCK_SIZE-1-selectEntry->ind.size)*size of(char));char *p2 = (char*)malloc((i-(MAX_BLOCK_SIZE-1-selectEntry->ind.size))*si zeof(char));int pi;int pn1=0,pn2=0;for(pi=0; pi<i; pi++){if(pi<MAX_BLOCK_SIZE-1-selectEntry->ind.size){p1[pn1++] = tmp[pi];}else{p2[pn2++] = tmp[pi];}}p1[pn1] = '\0';p2[pn2] = '\0';//存储FILE *bfp = fopen(blockspath, "r+");if(bfp==NULL){printf("DISK ERROR !\nFrom appendFile ...\n");return;}else{fseek(bfp,((MAX_BLOCK_SIZE-1)*selectEntry->ind.fat[0].num +selectEntry->ind.fat[0].end),SEEK_SET);fwrite(p1,sizeof(char),pn1,bfp);printf("line near 481\n");fseek(bfp,((MAX_BLOCK_SIZE-1)*bkNum),SEEK_SET);fwrite(p2,sizeof(char),pn2,bfp);fclose(bfp);FBT[bkNum]=1;selectEntry->ind.node_num = 2;selectEntry->ind.size = selectEntry->ind.size + i;selectEntry->ind.fat[0].end = MAX_BLOCK_SIZE-2;selectEntry->ind.fat[1].num = bkNum;selectEntry->ind.fat[1].begin = 0;selectEntry->ind.fat[1].end = pn2;saveFBT();saveDir();printf("文件保存成功!\n");}}}}}void create(){int bkNum = getFreeBlock(false);if(bkNum==-1){printf("数据块已用完,内存不足!\n");return;}char tmp;dirEntry *pt = (dirEntry*)malloc(sizeof(dirEntry)); pt->next=NULL;while(1){printf("filename: ");scanf("%s",pt->ind.filename);if(isInDir(pt->ind.filename)!=NULL){printf("文件名已存在!\n请重新输入:\n");}else{break;}}while(1){printf("Do you want to write the file ?[y/n]: ");scanf(" %c",&tmp);if((tmp=='y')||(tmp=='Y')||(tmp=='n')||(tmp=='N')) {break;}}pt->ind.num = curr_inode_num++;//文件保护码不是很懂,因此默认为"rrrwwwxxx"; char code[10] = "rrrwwwxxx";strcpy(pt->ind.code, code);pt->ind.size = 0;pt->ind.node_num = 0;//初始化,跟存储要相符合bool isNoBk = false;if(tmp=='y'||tmp=='Y'){charcontent[MAX_DATANODE_NUM][MAX_BLOCK_SIZE];char tmp;printf("End with '$'\n");int i = 0;while((tmp=getchar())!='$'){if(i==0&&tmp=='\n'){continue;}content[i/MAX_BLOCK_SIZE][i++] = tmp;}pt->ind.size = i;//此时已经结束输入if(i>(MAX_BLOCK_SIZE-1)*MAX_DA TANODE_NUM) {printf("文件过大,无法存储,创建失败!\n");return;}for(k=0; k<=i/(MAX_BLOCK_SIZE-1);k++){block bk;int bkn;for(bkn=0; bkn<MAX_BLOCK_SIZE-1; bkn++) {bk.content[bkn]='$';}bk.content[MAX_BLOCK_SIZE-1]='\0';//printf("bk.content: %s\n", bk.content);char *tmp;int tp=0;int len=0;if(k==0){if(i<MAX_BLOCK_SIZE-1){len = i;}}if(k==1)len=i%(MAX_BLOCK_SIZE-1)+1;}for(tp=0; tp<len; tp++){bk.content[tp] = content[k][tp];}bk.isRevised = true;if(k==0){bk.num = bkNum;}else{bk.num = getFreeBlock(true);if(bk.num==-1){printf("数据块已用完,内存不足!\n");return;}}saveBlock(bk);pt->ind.fat[k].num = bk.num;pt->ind.fat[k].begin = 0;pt->ind.fat[k].end = len;}pt->ind.node_num = k;}if(currEntry==NULL){DIR = pt;}else{currEntry->next = pt;}currEntry = pt;saveDir();saveFBT();printf("Succeed create file [%s] !",pt->ind.filename); }void del(){char tmp[30];printf("请输入要删除的文件名: "); scanf("%s",tmp);if(isInDir(tmp)==NULL){printf("不存在这个文件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.搭建一个简单的apache+mysql+php组合:点击红帽子—>系统设置-->服务器设置 服务勾上httpd然后点开始之后保存,如图:在浏览器测试如图:打开文件夹file:/var/www/html 在其中建一个about.php的文件,代码如下:<?Phpinfo();?>打开浏览器测试如图:点击红帽子—>系统设置-->服务器设置 服务勾上mysqld然后点开始之后保存,然后在终端输入如图所示代码,给MYSQL设定密码,如图:2.根据题目要求需要数据库中建立学生个人信息(学号、性别、年龄),所修课成,所在院系三个表,不是独立的。
所以我建了一个名为php的数据库以及名为register(用户),student(学生),faculty(学院),course(课程)的数据表,代码如下:CREATE TABLE IF NOT EXISTS student (name varchar(30) NOT NULL,id int(30) NOT NULL,class char(30) NOT NULL,sex varchar(30) NOT NULL,age int(20) NOT NULL);CREATE TABLE IF NOT EXISTS register (username char(25) NOT NULL,password int(20) NOT NULL);INSERT INTO register VALUES('admin','111111');CREATE TABLE IF NOT EXISTS course (id int(30) NOT NULL,classname char(30) NOT NULL,classid int(20) NOT NULL,teacher varchar(30) NOT NULL,socre int(10) NOT NULL);CREATE TABLE IF NOT EXISTS faculty (id int(30) NOT NULL,name char(30) NOT NULL,academical char(30) NOT NULL);建数据库及数据表如图:3.下面进行管理员与数据库的连接:在file:/var/www/html file:/var/www/html建立一个名为学生信息管理系统的文件夹,然后建一个register.phpy以及denglu.html,代码如下:Register.php:<?php$username=$_POST['username'];$password=$_POST['password'];$con=mysql_connect("localhost","root","root");mysql_select_db("php");$sql="select * from register where username='$username' AND password='$password'";$re=mysql_query($sql);$row=mysql_num_rows($re);if($row!=1){echo "登录失败";}else echo "<meta http-equiv=refresh content=1;url=caozuo.html>";?>denglur.html:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>无标题文档</title><style type="text/css"><!--.STYLE1 {font-family: "黑体", "宋体";font-size: 30px;}.STYLE2 {font-size: 24px}.STYLE3 {font-family: "黑体";font-size: 40px;}body {background-image: url(images/登录.bmp);}--></style></head><body><form id="form1" name="form1" method="post" action="register.php"><p class="STYLE3">欢迎登录学生信息管理系统</p><p> </p><table width="640" border="0" align="center" cellpadding="0" cellspacing="10"> <tr><td><div align="right"><span class="STYLE1">登录名:</span><span class="STYLE2"></span></div></td><td><label><input type="text" name="username" /></label></td></tr><tr><td><div align="justify" class="STYLE1"><div align="right">登录密码:</div></div></td><td><label><input type="password" name="password" /></label></td></tr></table><p align="center"><input type="submit" name="Submit" value="登录" /></p><p> </p></form></body></html>如图:登录之后进入选择操作界面如图:4.下面进行信息录入操作,如图:代码如下:luru.php:<?php$id=$_POST['id'];$name=$_POST['name'];$sex=$_POST['sex'];$age=$_POST['age'];$classid=$_POST['classid'];$class=$_POST['class'];$classname=$_POST['classname'];$teacher=$_POST['teacher'];$socre=$_POST['socre'];$academical=$_POST['academical'];$con=mysql_connect("localhost","root","root");mysql_select_db("php");$sq1="insert into student values('$name','$id','$class','$sex','$age')";$sq2="insert into course values('$id','$classname','$classid','$teacher','$socre')";$sq3="insert into faculty values('$id','$name','$academical')";$re1=mysql_query($sq1);$re2=mysql_query($sq2);$re3=mysql_query($sq3);if($re1&&$re2&&$re3){echo "录入成功";/*echo "<meta http-equiv=refresh content=3;url=w登.html>";*/}else echo"录入失败";mysql_close($con);?>Luru.html:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>无标题文档</title><style type="text/css"><!--.STYLE1 {font-family: "黑体";font-size: 44px;color: #000000;}body {background-image: url(images/登录.bmp);}.STYLE13 {font-family: "黑体", "楷体"; font-size: 16px; color: #000000; }--></style></head><body><form id="form1" name="form1" method="post" action="luru.php"><p align="right" class="STYLE1">学生信息录入</p><p> </p><p> </p><table width="640" border="0" align="center" cellpadding="0" cellspacing="10"> <tr><td><div align="center" class="STYLE13">学号:</div></td><td><div align="center"><input type="text" name="id" /></div></td></tr><tr><td><div align="center" class="STYLE13">姓名:</div></td><td><div align="center"><input type="text" name="name" /></div></td></tr><tr><td><div align="center" class="STYLE13">性别:</div></td><td><div align="center"><input type="text" name="sex" /></div></td></tr><tr><td><div align="center" class="STYLE13">年龄:</div></td><td><div align="center"><input type="text" name="age" /></div></td></tr><tr><td><div align="center" class="STYLE13">课程ID:</div></td><td><div align="center"><input type="text" name="classid" /></div></td></tr><tr><td><div align="center" class="STYLE13">班级:</div></td><td><div align="center"><input type="text" name="class" /></div></td></tr><tr><td><div align="center" class="STYLE13">所修课程:</div></td><td><div align="center"><input type="text" name="classname" /></div></td></tr><tr><td><div align="center" class="STYLE13">任课教师:</div></td><td><div align="center"><input type="text" name="teacher" /></div></td></tr><tr><td><div align="center" class="STYLE13">该课程成绩:</div></td> <td><div align="center"><input type="text" name="socre" /></div></td></tr><tr><td><div align="center" class="STYLE13">所属院系:</div></td><td><div align="center"><input type="text" name="academical" /></div></td></tr></table><p align="center"><label><input type="submit" name="Submit" value="确定" /></label></p><p align="center"> </p></form></body></html>5.下面是信息的查询操作代码如下:chaxun.php<?php$a=$_POST['id'];$con=mysql_connect("localhost","root","root");mysql_select_db("php",$con);$result = mysql_query("SELECT student.class,faculty.academical,course.classname,course.id,course.teacher,course.s ocre,student.sex,student.age,FROM student, faculty, courseWHERE ( (student.id =$a)AND (course.id =$a)AND (faculty.id =$a))");echo "<table border='1' bordercolor='#ff0000'><tr><th>姓名</th><th>性别</th><th>年龄</th><th>班级</th><th>所属学院</th><th>学号</th><th>所选课程</th><th>该课成绩</th><th>任课教师</th></tr>";while($row = mysql_fetch_array($result)){echo "<tr>";echo "<td>". $row['8']."</td>";echo "<td>". $row['6']."</td>";echo "<td>". $row['7']."</td>";echo "<td>". $row['0']."</td>";echo "<td>" . $row['1'] . "</td>";echo "<td>" . $row['3'] . "</td>";echo "<td>" . $row['2'] . "</td>";echo "<td>" . $row['5'] . "</td>";echo "<td>" . $row['4'] . "</td>";echo "</tr>";}echo "</table>";?>Cahxun.html<style type="text/css"><!--body {background-image: url(images/1.jpg);background-repeat: no-repeat;}.STYLE4 {color: #000000;font-weight: bold;font-family: "黑体", "楷体";}--></style><form id="form1" name="form1" method="post" action="chaxun.php"><p> </p><p> </p><table width="640" border="0" cellspacing="10" cellpadding="0"><tr><td><div align="center"><span class="STYLE4">输入您要查询的ID:</span><input type="text" name="id" /></div></td></tr><tr><td><div align="center"><input type="submit" name="Submit" value="提交" /></div></td></tr></table><p> </p><p align="left"> </p><p> </p></form>6.下面进行信息的修改操作代码如下:Xiugai.php<?php$mm=$_POST['id'];$a=$_POST['class'];$b=$_POST['academical'];$c=$_POST['classname'];$d=$_POST['socre'];$e=$_POST['teacher'];$f=$_POST['name'];$g=$_POST['sex'];$h=$_POST['age'];$con=mysql_connect("localhost","root","root");mysql_select_db("php");mysql_query("update course set socre='$d',classname='$c',teacher='$e' where id=$mm");mysql_query("update student set class='$a',name='$f',sex='$g',age='$h'where id=$mm");mysql_query("update faculty set academical='$b' where id=$mm");echo "<meta http-equiv=refresh content=1;url=jingquechaxun.html>"?>Xiugai.html<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>无标题文档</title><style type="text/css"><!--body {background-image: url(images/1.jpg);}.STYLE1 {color: #FFFFFF}.STYLE2 {color: #CCCCCC}.STYLE3 {color: #000000}--></style></head><body><form id="form1" name="form1" method="post" action="xiugai.php"><table width="640" border="0" align="center" cellpadding="0" cellspacing="10"> <p align="center"><span class="STYLE1">请输入需要修改信息的学生ID:</span> <input type="text" name="id" /></p><tr><td><div align="center" class="STYLE2">姓名:</div></td><td><div align="center" class="STYLE3"><input type="text" name="name" /></div></td></tr><tr><td><div align="center" class="STYLE2">性别:</div></td><td><div align="center" class="STYLE3"><input type="text" name="sex" /></div></td></tr><tr><td><div align="center" class="STYLE2">年龄:</div></td><td><div align="center" class="STYLE3"><input type="text" name="age" /></div></td></tr><tr><td><div align="center" class="STYLE2">班级:</div></td><td><div align="center" class="STYLE3"><input type="text" name="class" /></div></td></tr><tr><td><div align="center" class="STYLE2">所属学院:</div></td> <td><div align="center" class="STYLE3"><input type="text" name="academical" /></div></td></tr><tr><td><div align="center" class="STYLE2">所选课程:</div></td> <td><div align="center" class="STYLE3"><input type="text" name="classname" /></div></td></tr><tr><td><div align="center" class="STYLE2">该课成绩:</div></td> <td><div align="center" class="STYLE3"><input type="text" name="socre" /></div></td></tr><tr><td><div align="center" class="STYLE2">任课教师:</div></td> <td><div align="center" class="STYLE3"><input type="text" name="teacher" /></div></td></tr></table><p align="center"><input type="submit" name="Submit" value="提交" /></p><p> </p><p> </p><p> </p></form></body></html>至此一个简单的具有学生信息录入、查询、修改功能的学生信息管理系统完成!。