操作系统课程设计C语言

合集下载

c语言课程设计选课系统设计

c语言课程设计选课系统设计

c语言课程设计选课系统设计一、教学目标本课程旨在通过C语言选课系统设计的学习,让学生掌握C语言的基本语法、数据结构、函数、指针等核心知识,培养学生运用C语言进行程序设计的能力。

通过本课程的学习,学生应达到以下目标:1.掌握C语言的基本语法和编程规范。

2.理解数据类型、变量、常量等基本概念。

3.学会使用运算符、表达式进行数学计算。

4.掌握控制结构,如条件语句、循环语句等。

5.了解数组、字符串、指针等数据结构的使用。

6.熟悉函数的定义和调用,掌握函数的参数传递和返回值。

7.理解结构体、联合体、枚举等高级数据结构。

8.能够编写简单的C语言程序,如计算器、排序算法等。

9.能够使用C语言进行文件操作,如文件的读写、打开关闭等。

10.具备一定的调试和排错能力,能够使用调试工具进行程序调试。

11.掌握C语言编程的规范和技巧,编写结构清晰、可读性强的代码。

情感态度价值观目标:1.培养学生的编程兴趣,激发学生主动探索和学习编程的积极性。

2.培养学生团队协作精神,学会与他人交流和分享编程经验。

3.培养学生解决问题的能力,勇于面对编程过程中的困难和挑战。

二、教学内容本课程的教学内容主要包括C语言的基本语法、数据结构、函数、指针等核心知识。

具体安排如下:1.C语言概述:介绍C语言的历史、特点和应用领域。

2.基本数据类型和变量:学习整型、浮点型、字符型等数据类型,以及变量的声明和使用。

3.运算符和表达式:掌握算术运算符、关系运算符、逻辑运算符等,以及表达式的编写。

4.控制结构:学习条件语句、循环语句等控制结构的使用。

5.数组和字符串:了解数组的定义和使用,学习字符串的存储和操作。

6.指针:掌握指针的概念、运算和应用,如动态内存分配等。

7.函数:学习函数的定义、声明和调用,掌握函数的参数传递和返回值。

8.结构体和其他高级数据结构:了解结构体、联合体、枚举等高级数据结构的使用。

9.文件操作:学习文件的读写、打开关闭等操作。

10.编程实践:通过实际项目练习,巩固所学知识,培养编程能力。

c语言课程设计

c语言课程设计

c语言课程设计一、课程目标知识目标:1. 学生能掌握C语言基础语法,包括变量声明、数据类型、运算符、控制结构等。

2. 学生能理解函数的定义和调用,掌握模块化编程思想。

3. 学生能运用数组、指针解决实际问题,提高编程能力。

4. 学生了解C语言中的文件操作,能够读写文件,处理数据。

技能目标:1. 学生能运用C语言编写简单的程序,解决实际问题。

2. 学生通过课程学习,培养逻辑思维能力和问题解决能力。

3. 学生能够使用调试工具,如gcc、gdb等,对程序进行编译、调试和优化。

情感态度价值观目标:1. 培养学生对编程的兴趣,激发学习热情,形成自主学习习惯。

2. 学生能够体会到编程带来的成就感,增强自信心。

3. 学生在学习过程中,培养团队协作精神,学会分享和交流。

课程性质:本课程为C语言入门课程,以实践为主,理论联系实际,注重培养学生的动手能力和编程思维。

学生特点:学生为初中年级,具备一定的计算机操作基础,对编程有一定兴趣,但缺乏系统的编程知识和实践经验。

教学要求:结合学生特点,课程设计应以案例教学为主,注重实践操作,引导学生主动探索,培养编程兴趣。

同时,注重培养学生的逻辑思维能力和问题解决能力,提高学生的编程素养。

通过分解课程目标为具体学习成果,使学生在课程结束后能够独立编写简单的C语言程序,解决实际问题。

二、教学内容1. C语言基础语法- 变量声明、数据类型- 运算符、表达式- 控制结构(顺序、选择、循环)2. 函数与模块化编程- 函数定义、调用- 参数传递、返回值- 递归函数3. 数组与指针- 一维数组、多维数组- 指针的概念、运算- 指针与数组的关系4. 文件操作- 文件的打开、关闭- 文件的读写操作- 文件指针定位5. 编程实践- 简单的计算器程序- 学生管理系统- 排序算法实现教学安排与进度:第一周:C语言基础语法(1-2章)第二周:函数与模块化编程(3章)第三周:数组与指针(4章)第四周:文件操作(5章)第五周:编程实践与项目开发(6章)教材章节关联:1. C语言基础语法:教材第1-2章2. 函数与模块化编程:教材第3章3. 数组与指针:教材第4章4. 文件操作:教材第5章5. 编程实践:教材第6章教学内容确保科学性和系统性,以教材为基础,结合实践案例,引导学生逐步掌握C语言编程知识。

c语言课程设计系统

c语言课程设计系统

c语言课程设计系统一、教学目标本节课的教学目标是让学生掌握C语言的基本概念和语法,能够编写简单的C语言程序。

具体分为三个部分:1.知识目标:学生能够理解C语言的历史和发展,掌握C语言的基本数据类型、运算符、控制结构、函数等概念。

2.技能目标:学生能够运用C语言编写简单的程序,解决实际问题。

3.情感态度价值观目标:培养学生对计算机编程的兴趣,提高学生动手实践的能力。

二、教学内容本节课的教学内容主要包括C语言的基本概念、语法和编程方法。

具体分为以下几个部分:1.C语言的基本概念:介绍C语言的历史和发展,理解C语言的特点和优势。

2.基本数据类型:整型、浮点型、字符型等数据类型的定义和使用。

3.运算符:算术运算符、关系运算符、逻辑运算符等运算符的用法。

4.控制结构:顺序结构、选择结构、循环结构等控制结构的实现。

5.函数:函数的定义、声明和调用,了解函数的参数传递和返回值。

6.编程方法:学会使用C语言编写程序,掌握编程的基本步骤和技巧。

三、教学方法为了提高学生的学习兴趣和主动性,本节课将采用多种教学方法:1.讲授法:讲解C语言的基本概念和语法,让学生理解并掌握相关知识。

2.案例分析法:通过分析典型的C语言程序,让学生了解编程的方法和技巧。

3.实验法:让学生动手编写C语言程序,培养学生的实践能力。

4.讨论法:分组讨论编程过程中遇到的问题,培养学生的团队协作能力。

四、教学资源为了支持教学内容和教学方法的实施,本节课将采用以下教学资源:1.教材:《C语言程序设计》等相关教材,为学生提供理论知识的学习。

2.参考书:《C语言编程实践》、《C语言深度探索》等参考书,为学生提供更多的学习资料。

3.多媒体资料:PPT、视频等多媒体资料,丰富课堂教学形式。

4.实验设备:计算机、编程环境等实验设备,为学生提供动手实践的机会。

五、教学评估为了全面、客观、公正地评估学生的学习成果,本节课的教学评估将采用以下方式:1.平时表现:观察学生在课堂上的参与程度、提问回答等情况,了解学生的学习态度和兴趣。

linuxC语言课程设计

linuxC语言课程设计

linux C语言课程设计一、课程目标知识目标:1. 学生能掌握Linux环境下C语言的基本编程语法和结构;2. 学生能了解Linux操作系统的基本命令和文件系统;3. 学生能理解C语言在Linux平台下的编译、链接和执行过程;4. 学生能掌握Linux环境下C语言的调试技巧和性能优化方法。

技能目标:1. 学生能运用C语言编写简单的控制台程序,实现基本的输入输出功能;2. 学生能在Linux环境下熟练使用gcc、gdb等工具进行C程序的编译、调试和优化;3. 学生能运用所学知识解决实际问题,具备一定的编程实践能力;4. 学生能通过团队协作完成一个小型的Linux C语言项目,提高沟通与协作能力。

情感态度价值观目标:1. 学生对Linux C语言编程产生兴趣,树立编程自信心;2. 学生养成严谨、细致的编程习惯,注重代码规范和优化;3. 学生在编程实践中体会团队合作的重要性,培养团队精神和责任感;4. 学生认识到Linux C语言在计算机领域的重要地位,激发深入学习计算机科学的动力。

课程性质:本课程为实践性较强的学科,要求学生在掌握理论知识的基础上,通过上机实践和项目开发,提高编程能力和实际操作技能。

学生特点:学生具备一定的C语言基础,对Linux操作系统有一定了解,但对Linux C语言编程尚处于入门阶段。

教学要求:结合学生特点,注重理论与实践相结合,强化实践操作,鼓励学生动手实践和主动探索,提高学生的编程兴趣和实际应用能力。

同时,关注学生的情感态度价值观培养,使学生在学习过程中形成良好的编程习惯和团队合作精神。

通过本课程的学习,使学生具备Linux C语言编程的基本能力,为后续深入学习打下坚实基础。

二、教学内容1. Linux操作系统基础:介绍Linux操作系统的基本概念、命令行操作、文件系统结构,为学生提供必要的环境支持。

- 教材章节:第一章 Linux操作系统概述,第二章 Linux文件系统与命令行操作。

c语言课程设计及源代码

c语言课程设计及源代码

c语言课程设计及源代码一、教学目标本课程旨在让学生掌握C语言的基本语法、数据结构、算法和编程思想,培养学生具备基本的程序设计能力。

通过本课程的学习,学生将能够:1.理解C语言的基本语法和编程规则;2.熟练使用C语言进行简单的程序设计;3.掌握常用的数据结构和算法;4.培养良好的编程习惯和问题解决能力。

二、教学内容教学内容将按照教材的章节进行,主要包括:1.C语言的基本语法和编程规则;2.数据类型的定义和运算;3.控制语句和函数的使用;4.常用的数据结构和算法;5.指针和内存管理;6.文件操作和编程实践。

三、教学方法为了激发学生的学习兴趣和主动性,将采用多种教学方法:1.讲授法:通过讲解和演示,让学生掌握C语言的基本语法和编程规则;2.讨论法:通过小组讨论和实践,让学生深入理解和运用数据结构和算法;3.案例分析法:通过分析实际案例,让学生学会解决实际编程问题;4.实验法:通过上机实验,让学生动手实践,巩固所学知识。

四、教学资源为了支持教学内容和教学方法的实施,将准备以下教学资源:1.教材:选用权威、实用的C语言教材;2.参考书:提供相关的参考书籍,供学生自主学习;3.多媒体资料:制作PPT和教学视频,辅助讲解和演示;4.实验设备:提供计算机实验室,让学生进行上机实验。

通过以上教学设计,相信学生能够顺利完成本课程的学习,掌握C语言编程的基本技能。

五、教学评估为了全面、客观、公正地评估学生的学习成果,将采用多种评估方式:1.平时表现:通过课堂参与、提问和讨论,评估学生的学习态度和理解程度;2.作业:布置适量的作业,评估学生的编程能力和实践能力;3.考试:进行期中和期末考试,评估学生对课程知识的掌握程度;4.项目实践:课程项目,让学生综合运用所学知识解决问题,评估学生的综合能力。

六、教学安排教学安排将根据课程内容和学生的实际情况进行设计:1.教学进度:按照教材的章节顺序,合理安排每一节课的教学内容;2.教学时间:根据学生的作息时间,选择合适的时间段进行授课;3.教学地点:选择适宜的教室或实验室,保证教学环境的舒适和设施的齐全;4.教学活动:结合学生的兴趣爱好,安排一些实践活动,提高学生的学习积极性。

课程设计学生选课系统c语言

课程设计学生选课系统c语言

课程设计学生选课系统c语言一、课程目标知识目标:1. 理解C语言的基本语法和结构,掌握学生选课系统相关的数据类型、运算符、控制语句等知识;2. 学会使用C语言设计学生选课系统的功能模块,包括学生信息管理、课程信息管理、选课操作等;3. 了解C语言在学生选课系统中的应用场景,掌握一定的软件设计方法和技巧。

技能目标:1. 能够运用C语言编写简单的学生选课系统程序,具备基本的编程能力;2. 学会分析学生选课系统的需求,设计合理的程序结构,培养解决问题的能力;3. 能够使用调试工具对程序进行调试和优化,提高程序的执行效率。

情感态度价值观目标:1. 培养学生对C语言的兴趣,激发学习编程的热情,提高自主学习的积极性;2. 培养学生的团队协作意识,学会与他人合作完成项目任务;3. 通过实际操作,让学生认识到编程在解决实际问题中的价值,增强社会责任感。

课程性质:本课程为实践性较强的学科,结合实际应用场景,培养学生的编程能力和解决问题的能力。

学生特点:学生在本年级已具备一定的C语言基础,对编程有一定的兴趣和热情,但缺乏实际项目经验。

教学要求:教师需结合学生特点和课程性质,注重理论与实践相结合,引导学生主动参与,提高学生的实践操作能力。

在教学过程中,将课程目标分解为具体的学习成果,便于教学设计和评估。

二、教学内容1. C语言基础回顾:数据类型、变量、运算符、控制语句(选择、循环)、函数等基本概念和用法。

2. 学生选课系统需求分析:介绍学生选课系统的功能模块,分析各模块的需求,明确编程目标和任务。

3. 系统设计:- 数据结构设计:学生、课程等实体的属性和关系,以及数据存储方式;- 界面设计:系统菜单、功能界面等;- 功能模块设计:学生信息管理、课程信息管理、选课操作、查询等模块。

4. 编程实践:- 搭建开发环境,熟悉编程工具;- 编写各功能模块的代码,实现学生选课系统的基本功能;- 调试和优化程序,确保系统的稳定性和性能。

c语言课程设计学生选课系统设计

c语言课程设计学生选课系统设计

c语言课程设计学生选课系统设计一、课程目标知识目标:1. 理解C语言的基本语法和结构,掌握数组、指针、函数等基本概念;2. 学会使用结构体、文件操作等C语言特性进行数据组织和存储;3. 掌握面向过程编程思想,能够运用C语言设计简单的学生选课系统。

技能目标:1. 能够运用结构化编程方法,编写模块化的C语言代码;2. 学会使用C语言进行简单的数据输入、处理和输出;3. 能够运用调试工具,分析并解决程序中的错误。

情感态度价值观目标:1. 培养学生对计算机编程的兴趣,激发自主学习编程的积极性;2. 培养学生的团队合作意识,学会在团队中发挥个人优势,共同解决问题;3. 培养学生严谨、细心的编程习惯,认识到编程对培养逻辑思维能力和解决问题能力的重要性。

课程性质:本课程为C语言程序设计课程的实践环节,以学生选课系统设计为主题,结合C语言编程知识,培养学生的实际编程能力和解决问题的能力。

学生特点:学生已具备一定的C语言基础,对编程有一定了解,但实际操作能力有待提高。

教学要求:结合学生特点和课程性质,将课程目标分解为具体的学习成果,注重实践操作,强化编程能力和团队协作能力的培养。

在教学过程中,关注学生个体差异,提供个性化指导,确保课程目标的达成。

二、教学内容1. C语言基础知识复习:数组、指针、函数、结构体、文件操作等基本概念和用法。

教材章节:第三章数组和第四章函数。

2. 面向过程编程思想:顺序结构、分支结构、循环结构等控制结构在实际编程中的应用。

教材章节:第五章控制结构。

3. 学生选课系统需求分析:了解系统功能、模块划分,明确编程目标和任务。

教材章节:项目实训部分。

4. 学生选课系统设计:模块化设计、数据结构设计、界面设计等。

教材章节:项目实训部分。

5. 编程实践:根据设计文档,编写C语言代码实现学生选课系统。

教材章节:项目实训部分。

6. 调试与测试:使用调试工具,对程序进行调试和测试,确保系统功能的正确性和稳定性。

基于C语言的操作系统设计与实现

基于C语言的操作系统设计与实现

基于C语言的操作系统设计与实现操作系统是计算机系统中最核心的软件之一,它负责管理计算机系统的硬件资源,并提供用户与计算机之间的接口。

本文将介绍基于C语言的操作系统设计与实现,主要包括操作系统的基本概念、设计思路以及实现方法。

一、操作系统的基本概念1.1 操作系统的定义操作系统是指控制和管理计算机硬件、软件资源,并为用户提供各种服务的系统软件。

1.2 操作系统的功能1) 进程管理:负责管理进程的创建、调度、通信和终止等,保证系统的高效运行。

2) 内存管理:实现内存的分配和回收,为进程提供足够的内存空间。

3) 文件系统管理:负责文件的存储和管理,实现对文件的读写和保护等操作。

4) 设备管理:控制和管理计算机的各种设备,如磁盘、打印机等。

5) 用户界面:提供用户与计算机之间的交互界面,如图形界面、命令行界面等。

二、操作系统的设计思路2.1 模块化设计为了提高操作系统的可维护性和可扩展性,我们可以将操作系统分解为多个模块,每个模块负责一个特定的功能。

这样可以降低不同模块之间的耦合度,方便独立开发和测试。

2.2 内核设计操作系统的内核是其最核心的部分,负责处理中断、调度进程、管理内存等关键操作。

内核应该尽量简洁,功能单一,以提高系统的稳定性和响应速度。

2.3 软件层次结构为了使操作系统的各个功能模块之间更加清晰,我们可以采用分层的软件层次结构。

通常将操作系统分为硬件层、内核层和用户层。

硬件层负责与计算机硬件进行交互,内核层实现操作系统的核心功能,用户层为用户提供各种服务和接口。

三、基于C语言的操作系统实现方法3.1 编写启动代码在操作系统的开发过程中,首先需要编写启动代码,该代码负责初始化操作系统的基本环境,加载内核代码,并跳转到内核的入口地址。

3.2 编写内核代码内核是操作系统的核心,它负责处理中断、调度进程、管理内存等关键操作。

在C语言中,我们可以使用汇编语言内嵌来编写与硬件交互的代码,并使用C语言编写其他的功能模块。

教务排课系统课程设计c语言

教务排课系统课程设计c语言

教务排课系统课程设计c语言一、教学目标本课程旨在通过学习教务排课系统课程设计,让学生掌握C语言的基本语法、数据结构、算法以及编程思想,培养学生运用C语言解决实际问题的能力。

具体目标如下:1.知识目标:(1)理解C语言的基本语法和编程规范;(2)掌握常用的数据结构(如数组、链表、栈、队列等)及其应用;(3)熟悉常见的算法(如排序、查找等)及其实现;(4)了解软件工程的基本原理和方法。

2.技能目标:(1)能够运用C语言编写简单的程序;(2)具备基本的调试和排错能力;(3)掌握常用的软件开发工具和环境;(4)具备一定的团队协作和项目管理能力。

3.情感态度价值观目标:(1)培养学生的创新意识和解决问题的能力;(2)增强学生的自信心和自我成就感;(3)培养学生团队合作精神和良好的沟通技巧;(4)引导学生树立正确的职业观念和道德规范。

二、教学内容本课程的教学内容主要包括以下几个部分:1.C语言基本语法和编程规范;2.数据结构(数组、链表、栈、队列等)及其应用;3.算法(排序、查找等)及其实现;4.软件工程的基本原理和方法;5.常用的软件开发工具和环境。

教学进度安排如下:1.第1-2周:C语言基本语法和编程规范;2.第3-4周:数据结构(数组、链表、栈、队列等)及其应用;3.第5-6周:算法(排序、查找等)及其实现;4.第7-8周:软件工程的基本原理和方法;5.第9-10周:常用的软件开发工具和环境。

三、教学方法本课程采用多种教学方法相结合的方式,以激发学生的学习兴趣和主动性:1.讲授法:讲解基本概念、原理和方法;2.案例分析法:分析实际案例,让学生更好地理解理论知识;3.实验法:让学生动手实践,提高编程能力;4.讨论法:分组讨论,培养学生的团队合作精神和沟通能力。

四、教学资源本课程的教学资源包括:1.教材:《C程序设计语言》(K&R);2.参考书:《C Primer Plus》、《C和指针》;3.多媒体资料:教学PPT、视频教程等;4.实验设备:计算机、网络等。

C语言系统课程设计

C语言系统课程设计

C语言系统课程设计一、课程目标知识目标:1. 学生能掌握C语言的基础语法和结构,理解程序的基本执行流程。

2. 学生能运用C语言编写简单的程序,解决基本的数值计算与逻辑问题。

3. 学生能理解数组、函数和指针在C语言中的应用,并能运用到实际编程中。

技能目标:1. 学生能独立完成C语言程序的编写、调试和优化。

2. 学生通过课程设计,培养问题分析、程序设计和解决问题的实际操作能力。

3. 学生能够运用所学知识,结合算法思想,提高编程效率。

情感态度价值观目标:1. 培养学生严谨、细致的编程习惯,树立良好的程序设计思想。

2. 培养学生的团队协作精神,提高沟通与协作能力。

3. 激发学生对计算机编程的兴趣,鼓励创新思维,培养勇于挑战的精神。

课程性质分析:本课程为C语言系统课程设计,旨在通过实际操作,巩固和拓展学生对C语言知识的掌握,提高学生的编程实践能力。

学生特点分析:高中年级学生已具备一定的逻辑思维能力,对计算机编程有一定的基础认识,但实践经验不足,需要通过课程设计加强实际操作能力的培养。

教学要求:1. 结合课本知识,注重理论与实践相结合,提高学生的编程实践能力。

2. 注重启发式教学,引导学生主动思考,培养学生的创新意识。

3. 以学生为主体,关注个体差异,提高课程设计的针对性和实效性。

二、教学内容1. C语言基础语法:变量定义、数据类型、运算符、表达式、输入输出语句等。

教材章节:第1章-第3章2. 控制结构:顺序结构、分支结构、循环结构。

教材章节:第4章3. 函数:函数定义、调用、递归。

教材章节:第5章4. 数组:一维数组、二维数组、字符串数组。

教材章节:第6章5. 指针:指针的概念、指针与数组、指针与函数。

教材章节:第7章6. 结构体与共同体:结构体的定义、初始化、结构体数组、共同体。

教材章节:第8章7. 文件操作:文件打开、关闭、读写操作。

教材章节:第9章8. 编程实践:综合运用所学知识,完成课程设计项目。

c操作系统课程设计

c操作系统课程设计

c 操作系统课程设计一、课程目标知识目标:1. 理解操作系统的基本概念,掌握操作系统的功能和结构;2. 学习C语言在操作系统编程中的应用,熟悉常用的数据结构和算法;3. 掌握进程管理、内存管理、文件系统等操作系统的核心模块原理及实现方法;4. 了解操作系统在计算机系统中的作用,提高对计算机系统整体认识。

技能目标:1. 能够使用C语言编写简单的操作系统程序,如进程调度、内存分配等;2. 学会分析操作系统性能,优化程序,提高系统运行效率;3. 掌握操作系统调试和测试方法,具备一定的系统故障排查能力;4. 培养团队合作能力,学会在项目中进行有效沟通和协作。

情感态度价值观目标:1. 培养学生对操作系统课程的学习兴趣,激发探究操作系统的热情;2. 增强学生的计算思维和问题解决能力,培养创新意识和实践能力;3. 培养学生的责任心和使命感,使其认识到操作系统在国家安全、社会发展中的重要作用;4. 引导学生树立正确的价值观,认识到技术发展对社会进步的推动作用。

课程性质:本课程为计算机科学与技术专业的核心课程,旨在让学生掌握操作系统的基本原理和实现方法,培养具备实际编程能力的专业人才。

学生特点:学生已经具备一定的C语言基础,对计算机系统有一定了解,但可能缺乏实际项目经验。

教学要求:结合学生特点,注重理论与实践相结合,通过课程设计提高学生的动手能力和解决问题的能力。

同时,关注学生的情感态度价值观培养,激发学生的学习兴趣和责任感。

将课程目标分解为具体的学习成果,便于教学设计和评估。

二、教学内容1. 操作系统概述:介绍操作系统的基本概念、功能和目标,使学生了解操作系统的地位和作用。

教材章节:第一章 操作系统概述2. 进程管理:讲解进程与线程的概念、进程调度算法、进程同步互斥、死锁与饥饿等。

教材章节:第二章 进程管理3. 内存管理:介绍内存分配策略、虚拟内存技术、页面置换算法等。

教材章节:第三章 内存管理4. 文件系统:讲解文件和目录结构、文件存储与访问控制、磁盘空间分配策略等。

c语言课程设计系统类

c语言课程设计系统类

c语言课程设计系统类一、教学目标本课程的学习目标包括知识目标、技能目标和情感态度价值观目标。

知识目标要求学生掌握C语言中系统类的概念、原理和应用;技能目标要求学生能够熟练使用C语言进行系统类的编程和调试;情感态度价值观目标要求学生培养对计算机科学和编程的兴趣和热情,提高学生的问题解决能力和创新意识。

通过本课程的学习,学生将能够理解系统类的定义和作用,掌握系统类的属性和方法,了解系统类在C语言中的应用和优势。

同时,学生将能够运用系统类进行编程和解决问题,提高学生的编程能力和问题解决能力。

此外,学生将通过参与课堂讨论和实验操作,培养合作意识和团队精神,提高学生的沟通能力和协作能力。

二、教学内容本课程的教学内容将根据课程目标进行选择和,确保内容的科学性和系统性。

教学大纲将明确教学内容的安排和进度,指出教材的章节和列举内容。

教学内容包括系统类的概念、原理和应用。

首先,将介绍系统类的定义和特点,解释系统类的作用和意义。

然后,将讲解系统类的属性和方法,包括系统类的创建、销毁和操作等。

接着,将通过实例分析和编程实践,让学生掌握系统类在C语言中的应用和编程技巧。

最后,将介绍系统类的优缺点和适用场景,让学生了解系统类在实际编程中的选择和应用。

三、教学方法为了激发学生的学习兴趣和主动性,将采用多样化的教学方法。

包括讲授法、讨论法、案例分析法和实验法等。

讲授法将用于系统地介绍系统类的概念、原理和应用,通过讲解和演示,让学生掌握系统类的基本知识和编程方法。

讨论法将用于促进学生之间的互动和思考,通过小组讨论和问题解答,培养学生的问题解决能力和创新意识。

案例分析法将用于分析实际编程中的系统类应用,让学生通过具体案例理解和掌握系统类的使用和编程技巧。

实验法将用于实践和巩固学生对系统类的理解和掌握,通过编写和调试程序,提高学生的编程能力和问题解决能力。

四、教学资源为了支持教学内容和教学方法的实施,将选择和准备适当的教学资源。

包括教材、参考书、多媒体资料和实验设备等。

c操作系统课课程设计

c操作系统课课程设计

c 操作系统课课程设计一、教学目标本章节的教学目标旨在帮助学生掌握操作系统的基本原理和概念,培养学生对操作系统的兴趣和认识,提高学生在实际应用中分析和解决问题的能力。

具体包括以下三个方面:1.知识目标:学生能够了解操作系统的起源、发展历程以及基本概念,掌握操作系统的主要组成部分,如进程管理、内存管理、文件系统和输入/输出系统等。

2.技能目标:学生能够运用操作系统的基本原理和概念,分析和解决实际问题,如进程调度、内存分配、文件存取等。

3.情感态度价值观目标:学生通过学习操作系统,培养对计算机科学的热爱和敬业精神,提高团队协作能力和创新意识。

二、教学内容本章节的教学内容主要包括以下几个部分:1.操作系统的起源和发展历程:介绍操作系统的历史背景,了解操作系统的发展趋势。

2.操作系统的基本概念:讲解操作系统的定义、功能、特点和分类。

3.进程管理:阐述进程的概念、进程控制块、进程调度算法、进程同步与互斥等。

4.内存管理:介绍内存分配策略、内存回收方法、虚拟内存技术等。

5.文件系统:讲解文件和目录的概念、文件存储结构、文件访问控制等。

6.输入/输出系统:介绍输入/输出设备的管理、中断处理、缓冲区管理等内容。

三、教学方法为了提高教学效果,本章节将采用多种教学方法相结合的方式,包括:1.讲授法:教师讲解操作系统的相关概念和原理,引导学生掌握基本知识。

2.案例分析法:分析实际案例,让学生了解操作系统的应用场景和实际问题。

3.实验法:安排实验课程,让学生动手实践,加深对操作系统原理的理解。

4.讨论法:学生分组讨论,培养学生的团队协作能力和创新思维。

四、教学资源为了支持本章节的教学,我们将准备以下教学资源:1.教材:《操作系统原理与应用》等。

2.参考书:《现代操作系统》、《操作系统精髓与设计原理》等。

3.多媒体资料:操作系统的相关视频教程、课件等。

4.实验设备:计算机、网络设备等,用于开展实验课程。

五、教学评估本章节的教学评估将采用多元化评价方式,全面客观地评估学生的学习成果。

c操作系统课程设计报告

c操作系统课程设计报告

c 操作系统课程设计报告一、课程目标知识目标:1. 理解操作系统的基本概念,掌握操作系统的功能和作用;2. 学习C语言在操作系统中的应用,理解操作系统核心模块的实现原理;3. 掌握进程管理、内存管理、文件系统等基本知识,了解其与C语言编程的关联。

技能目标:1. 能够运用C语言编写简单的操作系统程序,如进程调度、内存分配等;2. 学会分析操作系统的性能,提出优化方案,并运用C语言进行改进;3. 培养学生的动手实践能力,能够独立完成一个小型操作系统的设计与实现。

情感态度价值观目标:1. 培养学生对计算机操作系统的兴趣,激发学习热情,形成主动学习的习惯;2. 培养学生的团队合作意识,学会与他人共同解决问题,提高沟通与协作能力;3. 培养学生的创新精神,鼓励学生勇于尝试,敢于突破,培养解决复杂问题的信心。

本课程针对高年级学生,课程性质为理论与实践相结合。

根据学生的知识水平,课程目标具体、可衡量,旨在帮助学生深入理解操作系统原理,提高C语言编程能力,培养实际操作与解决问题的技能。

课程目标分解为具体学习成果,便于后续教学设计和评估。

在教学过程中,注重启发式教学,引导学生主动探索,提高学生的实践能力和创新能力。

二、教学内容1. 操作系统基本概念:介绍操作系统的定义、功能、发展历程及分类;教材章节:第1章 操作系统概述2. 进程管理:讲解进程与线程的概念、进程调度算法、进程同步与互斥;教材章节:第2章 进程管理3. 内存管理:介绍内存分配策略、虚拟内存技术、页面置换算法;教材章节:第3章 内存管理4. 文件系统:讲解文件和目录结构、文件存储与访问控制、文件系统性能优化;教材章节:第4章 文件系统5. C语言在操作系统中的应用:分析C语言在操作系统编程中的优势,举例说明;教材章节:第5章 操作系统编程6. 操作系统性能分析与优化:介绍性能评价方法,分析操作系统性能瓶颈,提出优化方案;教材章节:第6章 操作系统性能分析与优化7. 课程实践:设计小型操作系统模块,如进程调度、内存分配等,运用C语言实现;教材章节:第7章 操作系统课程实践教学内容安排和进度:本课程共16课时,教学内容按照以上大纲进行安排,每部分内容分配2-3课时,最后4课时用于课程实践。

c语言课程设计系统类

c语言课程设计系统类

c语言课程设计系统类一、课程目标知识目标:1. 理解C语言中系统类的概念,掌握系统调用的基本方法。

2. 学会使用C语言标准库中与系统类相关的函数,如进程控制、文件操作等。

3. 了解C语言系统类的应用场景,能够运用所学知识解决实际问题。

技能目标:1. 培养学生运用C语言进行系统级编程的能力,能够编写简单的系统类程序。

2. 提高学生分析问题、解决问题的能力,使其能够运用系统类知识进行程序设计。

3. 培养学生团队协作和沟通能力,通过小组讨论和实践,共同完成课程设计。

情感态度价值观目标:1. 激发学生对计算机系统及C语言编程的兴趣,培养其探究精神。

2. 培养学生严谨、认真、负责的学习态度,使其养成良好的编程习惯。

3. 引导学生认识到编程语言在现实生活中的应用价值,提高其社会责任感。

课程性质:本课程为C语言编程的系统类课程设计,旨在帮助学生将所学的C 语言知识应用于实际编程场景,提高其编程能力和实际问题解决能力。

学生特点:学生已具备一定的C语言基础,对编程有一定的兴趣和热情,但可能在系统级编程方面缺乏实践经验。

教学要求:结合学生特点和课程性质,教师应采用任务驱动、案例教学等方法,引导学生通过实践掌握系统类编程知识。

同时,注重培养学生的团队协作能力和创新精神,提高课程设计的实际应用价值。

在教学过程中,关注学生的学习进度,及时调整教学策略,确保课程目标的实现。

二、教学内容1. 系统类编程基础:回顾C语言基础知识,重点讲解系统调用的概念和原理,介绍系统调用的分类和用途。

教材章节:第十章 系统调用2. 进程控制:讲解进程的创建、终止、等待和同步等基本操作,分析相关函数的使用方法。

教材章节:第十章 系统调用,第三节 进程控制3. 文件操作:介绍文件的基本概念,讲解文件的打开、关闭、读写等操作,以及文件属性和权限的设置。

教材章节:第十章 系统调用,第五节 文件操作4. 信号处理:讲解信号的基本概念、分类和信号处理机制,分析信号处理函数的使用方法。

linux环境c语言课程设计

linux环境c语言课程设计

linux环境c语言课程设计一、课程目标知识目标:1. 理解Linux操作系统的基本原理和常用命令;2. 掌握C语言的基本语法和编程技巧;3. 掌握在Linux环境下使用C语言进行程序设计的方法;4. 了解C语言在Linux系统中的编译、调试和运行过程;5. 掌握基本的文件操作和进程控制方法。

技能目标:1. 能够在Linux环境下熟练编写、编译和运行简单的C语言程序;2. 能够运用C语言进行数据处理、文件操作和进程控制;3. 能够运用所学知识解决实际问题,提高编程实践能力;4. 能够通过阅读和分析代码,提高程序调试和优化能力。

情感态度价值观目标:1. 培养学生严谨的编程思维和良好的编程习惯;2. 激发学生主动探索、创新和实践的兴趣,提高学生的自主学习能力;3. 培养学生团队协作精神,提高沟通与协作能力;4. 增强学生对开源文化的了解,培养开放、共享的价值观。

本课程针对高年级学生,结合学科特点和教学要求,注重理论与实践相结合,以实际操作为主,培养学生的编程能力和实践技能。

通过本课程的学习,使学生能够在Linux环境下熟练运用C语言进行程序设计,为后续专业课程学习打下坚实基础。

同时,注重培养学生的情感态度价值观,使他们在学习过程中形成良好的编程素养和团队协作意识。

二、教学内容1. Linux操作系统基础:介绍Linux系统的基本原理、使用方法和常用命令,包括文件系统结构、文件操作、文本编辑器使用等。

教材关联章节:第一章 Linux操作系统概述,第二章 文件与目录操作。

2. C语言基础知识:回顾C语言的基本语法,包括数据类型、运算符、控制结构、函数等。

教材关联章节:第三章 C语言基础知识,第四章 控制结构,第五章 函数。

3. Linux环境下C语言编程:讲解如何在Linux环境下编写、编译和运行C语言程序,介绍gcc编译器、gdb调试器的使用。

教材关联章节:第六章 C语言编程环境,第七章 程序编译与调试。

程序设计基础教程C语言课程设计

程序设计基础教程C语言课程设计

程序设计基础教程C语言课程设计一、课程概述本课程旨在通过对C语言的学习,帮助学生入门程序设计,掌握编程基本技能,全面提升编程能力。

本课程主要包含以下几个方面的内容:•C语言基础语法•数组、字符串、指针等•经典算法及实现•文件操作和数据存储通过本课程的学习,学生将掌握C语言基础知识及关键技能,可以完成基础程序设计任务。

二、课程目标•了解程序设计基本概念,掌握C语言基础语法及关键技能;•熟悉数组、字符串、指针等技术应用;•掌握经典算法及其实现原理;•学习文件操作和数据存储相关知识。

三、课程设计1. 实验环境•操作系统:Windows 7及以上、Linux;•开发软件:CodeBlocks;•相关工具:gcc编译器、Sublime Text等;•参考资料:电子书籍、记事本等。

2. 实验内容第一部分 C语言基础•变量、常量、表达式•选择结构和循环结构的编写•函数的定义和调用•递归和回溯算法•预处理和预定义名第二部分数组与字符•一维数组和多维数组的定义和使用•字符串相关函数和操作•应用举例:排序和查找算法第三部分指针和结构体•指针的定义、使用和运算•动态内存分配和释放•结构体的定义、使用和指针第四部分文件操作和数据存储•文件的读写操作•数据存储相关知识3. 实验要求1.实验代码必须符合C语言编程规范;2.实验代码必须具有较好的代码规范及可读性;3.实验时间为两个学期,每个学学期为8周。

四、实验步骤1.学生通过预备知识学习和自主学习,了解课程基础知识和程序设计规范。

2.按照课程安排,学生完成每周要求的实验任务。

3.学生完成实验后,对实验结果进行测试和调试。

4.规范化实验报告上交。

五、评分标准1.实验代码执行效率和正确性;2.实验代码的可读性和规范性;3.实验报告撰写水平。

六、实验作业1.实验一:程序基本结构及函数调用实现2.实验二:数组及其操作函数实现3.实验三:指针和结构体的应用实现4.实验四:文件操作和数据存储七、总结通过本课程的学习,学生将获得C语言的基础编程技能和实战经验,更重要的是学会了如何进行程序设计,并不断提高自己的编程能力。

c语言专业综合课程设计

c语言专业综合课程设计

c语言专业综合课程设计一、课程目标知识目标:1. 掌握C语言的基本语法和编程技巧,能独立完成简单的C程序设计。

2. 理解并掌握数组、函数、指针、结构体等C语言高级特性,并能应用于实际编程中。

3. 学会使用C语言进行数据处理和分析,掌握文件操作、动态内存分配等技巧。

技能目标:1. 培养学生运用C语言解决实际问题的能力,包括需求分析、设计算法、编写程序等。

2. 提高学生的编程实践能力,能熟练使用集成开发环境(IDE)进行C程序开发。

3. 培养学生团队协作和沟通能力,能有效地与他人合作完成课程设计任务。

情感态度价值观目标:1. 培养学生对计算机编程的兴趣和热情,激发学生的学习积极性。

2. 培养学生严谨、细致、勤奋的学习态度,养成良好的编程习惯。

3. 增强学生的自信心和责任感,使其在解决实际问题时具备较强的心理素质。

课程性质:本课程为C语言专业综合课程设计,旨在巩固和拓展学生所学C语言知识,提高学生的编程实践能力和解决实际问题的能力。

学生特点:学生已具备一定的C语言基础,具有一定的编程能力和逻辑思维能力,但实践经验不足。

教学要求:结合学生特点,课程设计应注重实践性、实用性和综合性,引导学生将所学知识应用于实际项目中,培养其团队协作和沟通能力。

通过课程学习,使学生在知识、技能和情感态度价值观方面得到全面提升。

二、教学内容本课程教学内容主要包括以下几部分:1. C语言基础知识回顾:包括数据类型、运算符、控制结构等,确保学生扎实掌握C语言基本语法。

2. 高级特性学习:深入讲解数组、函数、指针、结构体等高级特性,并通过实例演示其在实际编程中的应用。

3. 数据处理与分析:学习文件操作、动态内存分配等技巧,掌握数据处理和分析的基本方法。

4. 综合项目实践:结合实际案例,进行需求分析、设计算法、编写程序,培养学生解决实际问题的能力。

具体教学内容安排如下:第一周:C语言基础知识回顾,重点复习数据类型、运算符、控制结构等。

c语言课程设计系统设计

c语言课程设计系统设计

c语言课程设计系统设计一、教学目标本课程的教学目标是使学生掌握C语言的基本语法、数据结构、算法和编程思想,培养学生独立思考、解决问题的能力,并培养学生的团队合作意识和创新精神。

具体来说,知识目标包括:掌握C语言的基本语法、数据类型、运算符、控制结构、函数、数组、指针、结构体等;技能目标包括:能够使用C语言编写小程序,具备基本的调试和优化代码的能力;情感态度价值观目标包括:培养学生的团队合作意识,使学生理解编程不仅仅是一种技能,更是一种思考问题和解决问题的方式,培养学生的创新精神。

二、教学内容根据课程目标,教学内容主要包括C语言的基本语法、数据结构、算法和编程思想。

具体安排如下:1.C语言的基本语法:包括数据类型、运算符、控制结构、函数等,这部分内容将引导学生掌握C语言的基本表达方式。

2.数据结构:包括数组、指针、结构体等,这部分内容将帮助学生理解数据的和存储方式。

3.算法:包括排序算法、查找算法等,这部分内容将培养学生解决问题的能力。

4.编程思想:包括面向过程编程、面向对象编程等,这部分内容将引导学生掌握编程的基本思想。

三、教学方法为了达到课程目标,我们将采用多种教学方法,包括讲授法、案例分析法、实验法等。

通过多种教学方法的结合,我们希望能够激发学生的学习兴趣,提高学生的学习主动性。

1.讲授法:通过讲解C语言的基本语法、数据结构、算法和编程思想,使学生掌握相关知识。

2.案例分析法:通过分析实际案例,使学生理解C语言在实际编程中的应用。

3.实验法:通过动手实验,使学生巩固所学知识,提高编程能力。

四、教学资源为了支持教学内容和教学方法的实施,我们将准备以下教学资源:1.教材:选择合适的C语言教材,作为学生学习的主要参考资料。

2.参考书:提供相关的参考书籍,帮助学生深入理解C语言的相关知识。

3.多媒体资料:制作教学PPT、视频等多媒体资料,丰富教学手段,提高学生的学习兴趣。

4.实验设备:准备计算机、网络等实验设备,为学生提供动手实践的机会。

c语言课课程设计详细设计

c语言课课程设计详细设计

c语言课课程设计详细设计一、教学目标本课程旨在通过学习C语言编程,让学生掌握C语言的基本语法、数据类型、运算符、控制结构、函数等基本知识,培养学生编程思维和解决问题的能力。

通过本课程的学习,学生应达到以下目标:1.知识目标:–理解C语言的基本语法和编程规范;–掌握C语言的数据类型、运算符和控制结构;–学会使用C语言进行函数的定义和调用;–了解C语言的数组、字符串和指针等高级概念。

2.技能目标:–能够运用C语言编写简单的程序,解决实际问题;–具备阅读和理解C语言程序的能力;–掌握C语言的调试和优化技巧;–能够运用编程思维解决问题。

3.情感态度价值观目标:–培养学生对计算机科学的兴趣和热情;–培养学生的创新精神和团队合作意识;–培养学生良好的编程习惯和职业道德。

二、教学内容根据课程目标,本课程的教学内容主要包括以下几个方面:1.C语言的基本语法和编程规范;2.数据类型、运算符和控制结构;3.函数的定义和调用;4.数组、字符串和指针等高级概念。

具体的教学大纲如下:第1-2周:C语言的基本语法和编程规范;第3-4周:数据类型、运算符和控制结构;第5-6周:函数的定义和调用;第7-8周:数组、字符串和指针等高级概念。

三、教学方法为了提高教学效果,本课程将采用多种教学方法,包括:1.讲授法:通过讲解和示例,让学生掌握C语言的基本知识和编程技巧;2.讨论法:通过小组讨论和问题解答,培养学生的编程思维和解决问题的能力;3.案例分析法:通过分析实际案例,让学生了解C语言在实际应用中的重要性;4.实验法:通过上机实验,让学生动手编写C语言程序,提高编程能力。

四、教学资源为了支持教学内容和教学方法的实施,我们将准备以下教学资源:1.教材:《C程序设计语言》(K&R);2.参考书:《C Primer Plus》、《C和指针》;3.多媒体资料:教学PPT、视频教程、在线编程练习;4.实验设备:计算机、编程环境(如Visual Studio、Code::Blocks等)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

附:源代码#include <stdio.h>#include <stdlib.h>#include <malloc.h>#include <string.h>#include <dos.h>#include <conio.h>#define BLOCKSIZ 512 //磁盘块的大小#define DATABLKNUM 512 //数据块的数目#define BLKGRUPNUM 50 //数据块组包含多少数据块#define P_N_BLOCKS 15 //inode节点中指向数据块的指针个数#define GROUPNUM DATABLKNUM/BLKGRUPNUM+1 //数据块组组数#define DINODESIZ 512 //磁盘i结点区的大小(空间32×512)#define DINODENUM 32 //磁盘i结点区的块数#define SYSOPENFILE 40#define DIRNUM 32 //一个目录下的最多目录和文件的总和数#define DIRSIZ 14 //文件、目录名的长度(字节)#define UPWDSIZ 15 //秘密的长度#define UNAMSIZ 15 //用户名的长度#define PWDSIZ sizeof(struct pwd) //密码结构的长度#define PWDNUM BLOCKSIZ/PWDSIZ //密码数据空间的大小(pwd为单位)#define NOFILE 20 //一个用户最多可以打开的文件数目#define NHINO 128#define USERNUM 10 //用户名的长度#define DINODESTART 4*BLOCKSIZ //i结点区的开始地址-inodes table ,1引导2超块3block bitmap 4inode bitmap#define DATASTART (2+DINODENUM)*BLOCKSIZ //数据区的开始地址#define DATASTARTNO 36 //数据区开始指针/* di._mode */#define DIMODE_EMPTY 00000/*可以用的空间*/#define DIMODE_FILE 00001#define DIMODE_DIR 00002#define DIMODE_PASSWD 00004#define DIMODE_SYSTEM 00040 /*系统文件*/#define DIMODE_READ 00010 /* READ 和该数与操作后得到的是可以读该文件的用户组*/#define DIMODE_WRITE 00020 /* WRITE */#define DIMODE_EXICUTE 01000 /* EXICUTE */#define DIMODE_ADMIN 00100 /*管理员权限*/#define DIMODE_SHARE 00200 /*不需要权限*//*组*/#define GRUP_0 0 //管理员组#define GRUP_1 1#define GRUP_2 2#define GRUP_4 4/************************ 文件系统数据结构*******************************//*————————————————————————磁盘i结点结构,————————————————————————*/struct inode{// char di_name[DIRSIZ];unsigned __int16 di_ino; /*磁盘i节点标识*/unsigned __int16 di_number; /*关联文件数,当为0时表示删除文件*/unsigned __int16 di_mode; /*存取权限*/unsigned __int16 di_uid; /*磁盘i节点用户id*/unsigned __int16 di_gid; /*磁盘i节点权限组id*/ //1管理员组2用户组unsigned __int32 di_size; /*文件大小*/unsigned __int32 di_ctime; /* Creation time */unsigned __int32 di_mtime; /* Modification time */unsigned __int16 di_block[P_N_BLOCKS]; /* 一组block 指针*/};/*————————————————————————目录项结构————————————————————————*/struct direct{char d_name[DIRSIZ]; /*目录名(14字节)*/__int16 d_ino; /*目录号*/};/*————————————————————————超级快结构————————————————————————*/struct super_block{unsigned __int16 s_inodes_count; /* inodes 计数*/unsigned __int16 s_blocks_count; /* blocks 计数*/unsigned __int16 s_r_blocks_count; /* 保留的blocks 计数*/unsigned __int16 s_free_blocks_count; // 空闲的blocks 计数unsigned __int16 s_free_inodes_count; /* 空闲的inodes 计数*/unsigned __int16 s_free_blocks_group[GROUPNUM];//新增一个数组来记录每个数据块组中的空闲数据块计数unsigned __int16 s_first_data_block; /* 第一个数据block */unsigned __int16 s_log_block_size; /* block 的大小*/unsigned __int16 s_blocks_per_group; /* 每block group 的block 数量*/unsigned __int16 s_inodes_per_group; /* 每block group 的inode 数量*/};/*————————————————————————用户密码————————————————————————*/struct pwd{unsigned __int8 p_uid;unsigned __int8 p_gid;char username[UNAMSIZ];/*用户名新加的*/char password[UPWDSIZ];};/*————————————————————————目录结构————————————————————————*/struct dir{struct direct direct[DIRNUM];__int16 size;};// 全局变量unsigned __int8 di_bitmap[DINODENUM]; // 硬盘inode节点位图1表示已使用0表示未使用unsigned __int8 bk_bitmap[DATABLKNUM]; // 数据块block位图struct super_block filsys; //超级块struct pwd pwd[PWDNUM];//struct user user[USERNUM];//int usernum;FILE *fd; //文件指针struct inode *cur_inode; //i节点当前目录指针//struct dinode *dinodef; //全局硬盘节点指针struct inode *inodetemp; //i节点指针//struct inode *inodetemp2;const char fsystemname[20]="Linux.EXT2"; //模拟硬盘的文件名struct direct dir_buf[BLOCKSIZ / sizeof(struct direct)]; //目录数组char cmdhead[20];//cmd 的头表示所在哪个文件夹、int i_lock=0;//inode位图锁可能会多线程int b_lock=0;//block位图锁struct pwd *cur_user;/* 全局函数*/extern int Format();//格式化磁盘extern int Install();//启动,安装文件系统struct inode * read_inode(int);//install里面读取文件dinodestruct direct * read_dir_data(int);//读取存储文件夹的物理块extern void showdir();//命令dirint Enterdir(char[]);//进入某个文件夹命令-- cd 文件名int Fd_dirfile(char[]);//查找当前目录里的文件没找到返回-1 找到返回inode号int Iscmd(char[]);//判断是否两个字符串的命令void cmd_Up(char[],char[]);//两个字符串的命令int creat(char[]);//创建文件void changeinode();//交换指针char * ReadFile(char[]);//读取文件int cdir(char[]);//创建文件夹void showbitmap();//显示位图int deletefd(char[]);//删除文件int editfile(char[]);//编辑文件int rename(char[]);//重命名void showhelp();//命令帮助void login();void logout();int access();//权限判断/*磁盘i节点的分配与释放(当一个新文件被建立的时候,在给该文件分配磁盘存储区之前,应为该文件分配存放该文件说明信息的磁盘i节点,当从文件系统中删除某个文件时,应首先删除它的磁盘i节点项。

)*/int ialloc();/*开辟一个空闲的i节点,返回i节点*///磁盘块分配与释放函数int balloc(int);//申请硬盘空间void showaccess(char strname[20]);//内存i节点的获取与释放//extern struct inode *iget(unsigned int);/*获取hino位置的i节点,返回i节点指针*/ //extern void iput(struct inode* ); /*将i节点释放或是写入磁盘*///#endifvoid main(){char str[10];char strname[10];char c;printf("是否格式化?<y/n>");scanf("%c",&c);fflush(stdin);if(c=='y'){if(!Format()){return;}printf("格式化完毕!\n");}if(!Install()){return;}printf("login.................\n");login();showhelp();printf("%s>",cmdhead);while(1){scanf("%s",&str);if(strcmp(str,"exit")==0){fclose(fd);return;}else if(strcmp(str,"dir")==0){showdir();}else if(strcmp(str,"bit")==0){showbitmap();}else if(strcmp(str,"help")==0){showhelp();}else if(strcmp(str,"logout")==0){logout();}else if(Iscmd(str)){scanf("%s",&strname);cmd_Up(str,strname);}else{printf("错误命令!\n");}printf("%s>",cmdhead);}}//---------------------------格式化------------int Format(){struct pwd passwd [BLOCKSIZ/PWDSIZ];int i;/* creat the file system file */fd = fopen (fsystemname, "wb");/*读写创建一个二进制文件*/if(fd==NULL){printf("硬盘模拟文件创建失败!\n");return 0;}//超级块filsys.s_inodes_count=DINODENUM ; /* inodes 计数*/filsys.s_blocks_count=DA TABLKNUM; /* blocks 计数*/filsys. s_r_blocks_count=0; /* 保留的blocks 计数*/filsys. s_free_blocks_count=DA TABLKNUM-5; /* 空闲的blocks 计数*/filsys.s_free_blocks_group[0]=50-5;//第一个block group 已经被用了5个for(i=1;i<GROUPNUM-1;i++){filsys.s_free_blocks_group[i]=50; //后面的group 全部空闲// printf("block group %d 空闲个数为%d\n",i,filsys.s_free_blocks_group[i]);}filsys.s_free_blocks_group[GROUPNUM-1]=12;//最后一个block组只有12个block filsys.s_free_inodes_count=DINODENUM-5; /* 空闲的inodes 计数*/filsys.s_first_data_block=DATASTARTNO; /* 第一个数据block 也就是*/ filsys.s_log_block_size=BLOCKSIZ; /* block 的大小*/filsys.s_blocks_per_group=BLKGRUPNUM; /* 每block group 的block 数量*/ filsys.s_inodes_per_group=0; //每block group 的inode 数量暂未使用fseek(fd, BLOCKSIZ, SEEK_SET);fwrite (&filsys,BLOCKSIZ, 1,fd);//初始化dinode位图block位图di_bitmap[0]=1;di_bitmap[1]=1;di_bitmap[2]=1;//前三个inode 分别被root etc 用户passwd文件占用di_bitmap[3]=1;di_bitmap[4]=1;bk_bitmap[0]=1;bk_bitmap[1]=1;bk_bitmap[2]=1;//前三个inode 分别被root etc 用户passwd文件占用bk_bitmap[3]=1;bk_bitmap[4]=1;for(i=5;i<DINODENUM;i++){di_bitmap[i]=0;bk_bitmap[i]=0;}for(;i<DATABLKNUM;i++){bk_bitmap[i]=0;}fseek(fd, BLOCKSIZ*2, SEEK_SET);fwrite (di_bitmap,BLOCKSIZ, 1,fd);fseek(fd, BLOCKSIZ*3, SEEK_SET);fwrite (bk_bitmap,BLOCKSIZ, 1,fd);//初始化主目录struct inode *ininode;ininode=(struct inode *)malloc(sizeof (struct inode));if(!ininode){printf("ininode 内存分配失败!");return 0;}// strcpy(dinodef->di_name,"/");ininode->di_ino=0;//i节点标志ininode->di_number=3;//关联3个文件夹ininode->di_mode=DIMODE_DIR|DIMODE_SYSTEM;//0为目录ininode->di_uid=1;//用户id 第一个用户ininode->di_gid=1;//组id 管理员组ininode->di_size=0;//为目录ininode->di_ctime=0; /* Creation time */ininode->di_mtime=0; /* Modification time */ininode->di_block[0]=0;//所占物理块号后3块分别是一级指针,二级指针,3级指针fseek(fd,DINODESTART, SEEK_SET);fwrite(ininode,sizeof(struct inode), 1, fd);strcpy(dir_buf[0].d_name, ".");dir_buf[0].d_ino= 0;//当前目录的dinode号strcpy(dir_buf[1].d_name,"..");dir_buf[1].d_ino= 0;//主目录的上级目录还是自己strcpy(dir_buf[2].d_name, "etc");dir_buf[2].d_ino = 1;//etc目录fseek(fd, DATASTART, SEEK_SET);fwrite(dir_buf, BLOCKSIZ, 1, fd);//etc目录ininode->di_ino=1;//i节点标志ininode->di_number=5;//ininode->di_gid=1;//组idininode->di_block[0]=1;//所占物理块号后3块分别是一级指针,二级指针,3级指针fseek(fd, DINODESTART+BLOCKSIZ, SEEK_SET);fwrite(ininode,sizeof(struct inode), 1, fd);strcpy (dir_buf[0].d_name, ".");dir_buf[0].d_ino = 1;strcpy(dir_buf[1].d_name, "..");dir_buf[1].d_ino = 0;strcpy(dir_buf[2].d_name, "passwd");dir_buf[2].d_ino = 2;strcpy(dir_buf[3].d_name, "admin");dir_buf[3].d_ino = 3;strcpy(dir_buf[4].d_name, "xiao");dir_buf[4].d_ino = 4;fseek(fd, DATASTART+BLOCKSIZ, SEEK_SET);fwrite (dir_buf, BLOCKSIZ,1,fd);// admin 目录ininode->di_ino=3;//i节点标志ininode->di_number=2;//ininode->di_gid=0;//组idininode->di_block[0]=3;//所占物理块号后3块分别是一级指针,二级指针,3级指针fseek(fd, DINODESTART+BLOCKSIZ*3, SEEK_SET);fwrite(ininode,sizeof(struct inode), 1, fd);strcpy (dir_buf[0].d_name, ".");dir_buf[0].d_ino = 3;strcpy(dir_buf[1].d_name, "..");dir_buf[1].d_ino = 1;fseek(fd, DATASTART+BLOCKSIZ*3, SEEK_SET);fwrite (dir_buf, BLOCKSIZ,1,fd);// xiao 目录ininode->di_ino=4;//i节点标志ininode->di_number=2;//ininode->di_uid=2;//用户idininode->di_gid=1;//组idininode->di_block[0]=4;//所占物理块号后3块分别是一级指针,二级指针,3级指针fseek(fd, DINODESTART+BLOCKSIZ*4, SEEK_SET);fwrite(ininode,sizeof(struct inode), 1, fd);strcpy (dir_buf[0].d_name, ".");dir_buf[0].d_ino =4;strcpy(dir_buf[1].d_name, "..");dir_buf[1].d_ino = 1;fseek(fd, DATASTART+BLOCKSIZ*4, SEEK_SET);fwrite (dir_buf, BLOCKSIZ,1,fd);//用户passwd文件passwd[0].p_uid= 1;passwd[0].p_gid = GRUP_0; //管理员strcpy(passwd[0].username, "admin");strcpy(passwd[0].password, "admin");passwd[1].p_uid= 2;passwd[1].p_gid = GRUP_1;strcpy(passwd[1].username, "xiao");strcpy(passwd[1].password, "xiao");for (i=2; i<PWDNUM; i++){passwd[i].p_uid = 0;passwd[i].p_gid = GRUP_4;strcpy(passwd[i].username, "no this user");strcpy(passwd[i].password,"");}fseek(fd,DATASTART+BLOCKSIZ*2, SEEK_SET);fwrite(passwd,BLOCKSIZ,1,fd);ininode->di_ino=2;//i节点标志ininode->di_number=2;//ininode->di_mode=DIMODE_PASSWD|DIMODE_SYSTEM;//ininode->di_uid=1;//用户id 第一个用户ininode->di_gid=1;//组id 管理员组ininode->di_size=BLOCKSIZ;//大小ininode->di_ctime=0; /* Creation time */ininode->di_mtime=0; /* Modification time */ininode->di_block[0]=2;//所占物理块号后3块分别是一级指针,二级指针,3级指针fseek(fd, DINODESTART+BLOCKSIZ*2, SEEK_SET);fwrite(ininode,sizeof(struct inode), 1, fd);fclose(fd);free(ininode);return 1;}int Install(){// struct pwd passwd [BLOCKSIZ/PWDSIZ];//用户passwd数组int i;//struct inode *inode_temp;printf("install...\n");fd = fopen (fsystemname, "rb+");// 只读方式打开硬盘模拟文件if(fd==NULL){printf("文件打开失败\n");return 0;}fseek(fd,BLOCKSIZ,SEEK_SET);fread(&filsys,sizeof(struct super_block),1,fd);inodetemp=(struct inode *)malloc(sizeof (struct inode));if(!inodetemp){printf("inodetemp 内存分配失败!\n");return 0;}cur_inode=(struct inode *)malloc(sizeof (struct inode));if(!cur_inode){printf("cur_inode 内存分配失败!\n");return 0;}//读取inode bitmapfseek(fd,BLOCKSIZ*2,SEEK_SET);fread(di_bitmap,BLOCKSIZ,1,fd);//读取block bitmapfseek(fd,BLOCKSIZ*3,SEEK_SET);fread(bk_bitmap,BLOCKSIZ,1,fd);//读取用户passwd文件的inodeinodetemp=read_inode(2);if(inodetemp==NULL){return 0;}changeinode();//交换指针后cur_inode 指向当前目录的inode//读取用户passwd文件的数据区fseek(fd, DATASTART+BLOCKSIZ*cur_inode->di_block[0], SEEK_SET);fread(pwd,BLOCKSIZ, 1, fd);for(i=0;i<PWDNUM;i++){// usernum=0;if(pwd[i].p_uid!=0){// usernum++;printf("%s,%s\n",&pwd[i].username,&pwd[i].password);}}inodetemp=read_inode(0);//读取主目录的inode;if((inodetemp->di_mode&DIMODE_DIR)!=DIMODE_DIR){printf("读取主目录失败,请重新格式化!\n");}else{changeinode();//交换指针cur_inode 指向当前目录的inoderead_dir_data(cur_inode->di_block[0]);//printf("%d",cur_inode->di_block[0]);}// fclose(fd);return 1;}/*----------------------------------read_dir_data(int)读取存储文件夹的物理块----------------------------------*/struct direct * read_dir_data(int n){fseek(fd, DATASTART+BLOCKSIZ*n, SEEK_SET);fread (dir_buf, cur_inode->di_number*(sizeof(struct direct)),1,fd);return dir_buf;}struct inode * read_inode(int n)//读取文件的dinode{int i;// printf("正在读取inode %d\n",n);fseek(fd,DINODESTART+BLOCKSIZ*n,SEEK_SET);fread(inodetemp,sizeof(struct inode),1,fd);// if(cur_inode!=NULL)// {// if(inodetemp->di_mode&DIMODE_DIR==DIMODE_DIR)//当该目录不是passwd文件时将内存连接起来// {// // cur_inode->i_back=inodef;// // inodef->i_forw=cur_inode;// // printf("连接inode\n");// }// }if(inodetemp->di_ino!=n){printf("size=%d,number=%d,block=%d\n",inodetemp->di_size,inodetemp->di_number,inode temp->di_block[0]);printf("inode读取错误!不是%d,而是%d\n",inodetemp->di_ino,n);return NULL;}i=0;do{inodetemp->di_block[i]=inodetemp->di_block[i];//物理块号后3块分别是一级指针,二级指针,3级指针if(i>=P_N_BLOCKS-3)//该文件太大{printf("该文件太大,2级指针还没实现!\n");break;}// printf("n=%d,inode%d所占物理块号为%d\n",n,inodetemp->di_ino,inodetemp->di_block[i]);i++;}while(i<(int)inodetemp->di_size/BLOCKSIZ);//用do while是因为按照size来判断占用多少物理块号//目录时是0 文件有时候是恰好512 他们除以512 是0或1return inodetemp;}void showdir(){int i;for(i=0;i<cur_inode->di_number;i++){if(i==0){printf("\t.\t\t\t<dir>\tinode %d\n",dir_buf[i].d_ino);}else if(i==1){printf("\t..\t\t\t<dir>\tinode %d\n",dir_buf[i].d_ino);}else{inodetemp=read_inode(dir_buf[i].d_ino);if((inodetemp->di_mode&DIMODE_DIR)==DIMODE_DIR){printf("\t%s\t\t\t<dir>\tinode %d\n",dir_buf[i].d_name,dir_buf[i].d_ino);}else if((inodetemp->di_mode&DIMODE_FILE)==DIMODE_FILE){printf("\t%s\t\t\t<file>\tsize %d block %d\n",dir_buf[i].d_name,inodetemp->di_size,inodetemp->di_block[0]);}else{printf("\t%s\t\t\t<passwd>inode %d block %d\n",dir_buf[i].d_name,dir_buf[i].d_ino,inodetemp->di_block[0]);}}}}int Enterdir(char* namestr)//进入目录{int i;i=Fd_dirfile(namestr);if(i!=-1){read_inode(i);if((inodetemp->di_mode&DIMODE_DIR)!=DIMODE_DIR){printf("%s 不是目录!\n",namestr);return -1;}if(!access()){printf("您没有权限!\n");return -1;}changeinode();}else{printf("未找到该文件!请输入正确的文件或目录名\n");return -1;}read_dir_data(cur_inode->di_block[0]);return 1;}int Fd_dirfile(char namestr[20])//在当前目录下查找目录和文件{int i=0;// printf("i=%d 关联文件数%d\n",i,cur_inode->di_number);if(strcmp(".",namestr)==0){i=0;break;}if(strcmp("..",namestr)==0){i=1;break;}if(strcmp(dir_buf[i].d_name,namestr)==0){if(dir_buf[i].d_ino!=-1){//printf("已经找到%s ,inode=%d\n",namestr,dir_buf[i].d_ino);break;}}i++;}while(i<cur_inode->di_number);if(i==cur_inode->di_number){// printf("没有该文件或目录!\n");return(-1);}return (dir_buf[i].d_ino);}int Iscmd(char cmd[10]){// int i;if(!strcmp(cmd,"cd") ||!strcmp(cmd,"cdir") ||!strcmp(cmd,"create") ||!strcmp(cmd,"read") ||!strcmp(cmd,"edit") ||!strcmp(cmd,"del")||!strcmp(cmd,"attr")||!strcmp(cmd,"rename"))return 1;return 0;}void cmd_Up(char str[10],char strname[14]){int l,i,itemp;l=strlen(strname);if(l>=14){printf("文件名过长!\n");return;}if(strcmp(str,"cd")==0){if(Enterdir(strname)>=0){l=strlen(cmdhead);// printf("进入目录成功!\n");if(strcmp(strname,"..")==0){if(strcmp(cmdhead,"root")!=0){i=0;while(cmdhead[i]!='\0'){if(cmdhead[i]=='\\'){itemp=i;}i++;}cmdhead[itemp]='\0';}}else if(strcmp(strname,".")!=0){strcat(cmdhead,"\\");strcat(cmdhead,strname);}}else{printf("进入目录失败!\n");}}else if(strcmp(str,"create")==0){if(creat(strname)){// printf("文件创建成功!\n");}else{printf("文件创建失败!\n");}}else if(strcmp(str,"read")==0){char * buf;buf=ReadFile(strname);if(buf==NULL){printf("读取失败!\n");}else{printf("%s\n",buf);}free(buf);}else if(strcmp(str,"cdir")==0){if(cdir(strname)){// printf("文件夹创建成功!\n");}else{printf("文件夹创建失败!\n");}}else if(strcmp(str,"del")==0){if(deletefd(strname)){// printf("%s成功删除!\n",strname);}else{printf("%s删除失败!\n",strname);}}else if(strcmp(str,"edit")==0){if(editfile(strname)){printf("%s保存成功!\n",strname);}else{printf("%s保存失败!\n",strname);}}else if(strcmp(str,"rename")==0){if(rename(strname)!=-1){printf("重命名成功!\n");}}else if(strcmp(str,"attr")==0){showaccess(strname);}else{printf("错误命令!\n");}}/*-----------------创建文件-----------------*/int creat(char strname[14]){int fi,inum,bnum;fi=Fd_dirfile(strname);//查找该文件夹下是否有文件if(fi!=-1){printf("该文件夹下已有%s 文件或文件夹\n",strname);return 0;}fflush(stdin);//开始输入文件内容char *buf;int i,k;i = 0;k=0;buf = (char *)malloc(BLOCKSIZ*sizeof(char));printf("输入文件内容,以\"###\"结束:\n");while(k!=3){buf[i] = getchar();if(buf[i] == '#'){k++;if(k == 3)break;}elsek=0;i++;if(i/BLOCKSIZ > 0){buf = (char *)realloc(buf,BLOCKSIZ*(i/BLOCKSIZ+1));}}buf[i-2]='\0';printf("buf length %d\n",strlen(buf));inum=ialloc();//申请inode空间if(inum<=-1){printf("inode 申请失败!\n");return 0;}bnum=balloc(strlen(buf)/BLOCKSIZ+1);//申请blockif(bnum<=-1){printf("block 申请失败!\n");//释放申请成功的inodedi_bitmap[inum]=0;//inode位图置0 表示空闲filsys.s_free_inodes_count++;return 0;}inodetemp->di_ino=inum;//i节点标志//printf("inum=%d\n",inum);inodetemp->di_number=1;//关联一个文件inodetemp->di_mode=DIMODE_FILE;//0为目录inodetemp->di_uid=cur_user->p_uid;//用户id 第一个用户inodetemp->di_gid=cur_user->p_gid;//组id 管理员组inodetemp->di_size=strlen(buf);//inodetemp->di_ctime=0; /* Creation time */inodetemp->di_mtime=0; /* Modification time */printf("cu=%d,cg=%d\n", inodetemp->di_uid,inodetemp->di_gid);for(i=0;i<(int)inodetemp->di_size/BLOCKSIZ+1;i++){inodetemp->di_block[i]=bnum+i;}fseek(fd,DATASTART+BLOCKSIZ*bnum, SEEK_SET);//将新建的文件写入硬盘data区fwrite(buf,BLOCKSIZ*(inodetemp->di_size/BLOCKSIZ+1), 1, fd);fseek(fd,DINODESTART+BLOCKSIZ*inum, SEEK_SET);//将新建的文件信息写入硬盘inode区fwrite(inodetemp,BLOCKSIZ, 1, fd);dir_buf[cur_inode->di_number].d_ino=inum;//修改当前目录的结构strcpy(dir_buf[cur_inode->di_number].d_name,strname);fseek(fd,DATASTART+BLOCKSIZ*cur_inode->di_block[0], SEEK_SET);//将当前目录信息写入文件的block区fwrite(dir_buf,BLOCKSIZ, 1, fd);cur_inode->di_number++;//当前目录关联文件数++printf("当前目录文件数%d\n",cur_inode->di_number);fseek(fd,DINODESTART+BLOCKSIZ*cur_inode->di_ino, SEEK_SET);//将当前目录信息写入文件的inode区fwrite(cur_inode,sizeof(struct inode), 1, fd);filsys.s_free_blocks_count--;filsys.s_free_blocks_group[inodetemp->di_block[0]/GROUPNUM]--;filsys.s_free_inodes_count--;fseek(fd, BLOCKSIZ, SEEK_SET);//修改超级块free block计数free inode计数和每组free block 计数fwrite (&filsys,BLOCKSIZ, 1,fd);fseek(fd, BLOCKSIZ*2, SEEK_SET);//在硬盘修改inode位图fwrite (di_bitmap,BLOCKSIZ, 1,fd);fseek(fd, BLOCKSIZ*3, SEEK_SET);//在硬盘修改block位图fwrite (bk_bitmap,BLOCKSIZ, 1,fd);free(buf);return 1;}void changeinode()//交换cur_inode和inodetemp 指针{struct inode *intemp;intemp=cur_inode;cur_inode=inodetemp;inodetemp=intemp;}/*-----------------开辟一个空闲的i节点,返回i节点--------------------*/int ialloc(){int i;if(i_lock==1)//检测是否加锁{printf("inode位图区已锁!稍后再试!\n");i_lock=0;//解锁return -1;}i_lock=1;//将inode位图加锁if(filsys.s_free_inodes_count<=0){printf("inode已满!申请失败\n");i_lock=0;//inode位图解锁return -1;}//在inode bitmap寻找空闲的inodefor(i=0;i<DINODENUM;i++){if(di_bitmap[i]==0){// printf("已经找到空闲的inode %d\n",i);di_bitmap[i]=1;//inode位图置1 表示已被占用filsys.s_free_inodes_count--;i_lock=0;//inode位图解锁return i;}}i_lock=0;//inode位图解锁return -1;}/*----------------释放一个i节点-------------------*/void ifree(struct inode*){}/*-------------------------balloc/申请硬盘空间/------------------------*/int balloc(int k){printf("%d",k);int bnum,i,j,n,g;if(b_lock==1){printf("block位图区已锁!稍后重试!\n");return -1;}b_lock=1;//加锁n=BLKGRUPNUM;if(filsys.s_free_blocks_count<=0){printf("磁盘已满!申请失败\n");b_lock=0;//解锁return -1;}//在block bitmap寻找空闲的inodefor(i=0;i<GROUPNUM;i++){if(filsys.s_free_blocks_group[i]<k)//先找到有空闲的block组{continue;}if(i>=GROUPNUM-1){n=DA TABLKNUM%BLKGRUPNUM;//最后那个数据块只有12块}g=0;for(j=0;j<n;j++){if(bk_bitmap[i*GROUPNUM+j]==0){bnum=i*GROUPNUM+j;g++;// printf("已经找到空闲的block %d 它在第%d组\n",bnum,i);filsys.s_free_blocks_group[i]--;if(g==k)//如果找到足够的空闲块{b_lock=0;//解锁printf("已经找到空闲的block %d 它在第%d组\n",bnum,i);for(i=0;i<k;i++){bk_bitmap[bnum-i]=1;}return bnum-k+1;}}else{g=0;}}}printf("error!没有找到足够多连续空闲的block!\n");b_lock=0;//解锁return -1;}/*-------------------------balloc//释放硬盘空间------------------------*/void bfree(int bnum){}char* ReadFile(char strname[14]){int fi;fi=Fd_dirfile(strname);//查找该文件夹下是否有文件if(fi!=-1){// printf("已找到%s 文件\n",strname);}else{printf("找不到到%s 文件\n",strname);return NULL;}inodetemp=read_inode(fi);// printf("cu=%d,cg=%d\n", inodetemp->di_uid,inodetemp->di_gid);// printf("cu=%d,cg=%d\n", cur_user->p_uid,cur_user->p_gid);if(!access()){printf("您没有权限!\n");return NULL;}if(inodetemp==NULL){return NULL;}if((inodetemp->di_mode&DIMODE_FILE)!=DIMODE_FILE){printf("%s不是一个文件!\n",strname);return NULL;}char *buf;buf = (char *)malloc(BLOCKSIZ*(inodetemp->di_size/BLOCKSIZ+1));fseek(fd, DATASTART+BLOCKSIZ*inodetemp->di_block[0], SEEK_SET);fread (buf, BLOCKSIZ*(inodetemp->di_size/BLOCKSIZ+1),1,fd);return buf;}int cdir(char strname[]){int fi,inum,bnum;fi=Fd_dirfile(strname);//查找该文件夹下是否有文件if(fi!=-1){printf("该文件夹下已有%s 文件或文件夹\n",strname);return 0;}inum=ialloc();//申请inode空间if(inum<=-1){printf("inode 申请失败!\n");return 0;}bnum=balloc(1);//申请blockif(bnum<=-1){printf("block 申请失败!\n");//释放申请成功的inodedi_bitmap[inum]=0;//inode位图置0 表示空闲filsys.s_free_inodes_count++;return 0;}inodetemp->di_ino=inum;//i节点标志//printf("inum=%d\n",inum);inodetemp->di_number=2;//关联一个文件inodetemp->di_mode=DIMODE_DIR;//inodetemp->di_uid=cur_user->p_uid;//用户idinodetemp->di_gid=cur_user->p_gid;//组idinodetemp->di_size=0;//inodetemp->di_ctime=0; /* Creation time */inodetemp->di_mtime=0; /* Modification time */inodetemp->di_block[0]=bnum;//所占物理块号后3块分别是一级指针,二级指针,3级指针fseek(fd,DINODESTART+BLOCKSIZ*inum, SEEK_SET);//将新建的文件写入硬盘inode 区fwrite(inodetemp,BLOCKSIZ, 1, fd);struct direct buf[BLOCKSIZ / sizeof(struct direct)];strcpy(buf[0].d_name,".");buf[0].d_ino= inum;//当前目录的dinode号strcpy(buf[1].d_name,"..");buf[1].d_ino= cur_inode->di_ino;fseek(fd,DATASTART+BLOCKSIZ*bnum, SEEK_SET);//将新建的文件写入硬盘data区fwrite(buf,BLOCKSIZ, 1, fd);dir_buf[cur_inode->di_number].d_ino=inum;//修改当前目录的结构strcpy(dir_buf[cur_inode->di_number].d_name,strname);fseek(fd,DATASTART+BLOCKSIZ*cur_inode->di_block[0], SEEK_SET);//将当前目录信息写入文件的block区fwrite(dir_buf,BLOCKSIZ, 1, fd);cur_inode->di_number++;//当前目录关联文件数++printf("当前目录文件数%d\n",cur_inode->di_number);fseek(fd,DINODESTART+BLOCKSIZ*cur_inode->di_ino, SEEK_SET);//将当前目录信息写入文件的inode区fwrite(cur_inode,sizeof(struct inode), 1, fd);filsys.s_free_blocks_count--;filsys.s_free_blocks_group[inodetemp->di_block[0]/GROUPNUM]--;filsys.s_free_inodes_count--;fseek(fd, BLOCKSIZ, SEEK_SET);//修改超级块free block计数free inode计数和每组free block 计数fwrite (&filsys,BLOCKSIZ, 1,fd);fseek(fd, BLOCKSIZ*2, SEEK_SET);//在硬盘修改inode位图fwrite (di_bitmap,BLOCKSIZ, 1,fd);fseek(fd, BLOCKSIZ*3, SEEK_SET);//在硬盘修改block位图fwrite (bk_bitmap,BLOCKSIZ, 1,fd);return 1;}//显示inode位图block位图的使用情况1表示已用0表示未用void showbitmap(){int i;printf("inode free number %d,block free number %d\n",filsys.s_free_inodes_count,filsys.s_free_blocks_count);for(i=0;i<DINODENUM;i++){printf("%d",di_bitmap[i]);}for(i=0;i<DATABLKNUM;i++){if(i%BLKGRUPNUM==0){printf("\n");}printf("%d",bk_bitmap[i]);}printf("\n");}int deletefd(char strname[20]){int fi,i;fi=Fd_dirfile(strname);//查找该文件夹下是否有文件if(fi==-1){printf("该文件夹下没有%s 文件或文件夹\n",strname);return 0;}inodetemp=read_inode(fi);if((inodetemp->di_mode&DIMODE_SYSTEM)==DIMODE_SYSTEM){printf("%s是系统文件,无法删除\n",strname);return 0;}else if((inodetemp->di_mode&DIMODE_FILE)==DIMODE_FILE)//如果是文件则直接删除{}else if((inodetemp->di_mode&DIMODE_DIR)==DIMODE_DIR){if(inodetemp->di_number>2){printf("该目录下还有文件,不能删除此文件夹!\n");return 0;}}if(!access()){printf("您没有权限!\n");return -1;。

相关文档
最新文档