操作系统文件操作实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
南京工程学院
上机实验报告
课程名称:操作系统
实验项目名称:文件操作
学生班级:
学生学号:
学生姓名:
指导教师:
实验时间:
实验地点:信息楼专业机房实验成绩评定:
2016-2017-1学期
一、实验目的及内容
在掌握文件的概念和文件管理功能后,通过实验进一步了解文件的组织结构以及常规操作,从而了解文件的实际应用,为大量信息处理问题提供一种实用有效的管理模式。
内容:创建一个新文件,文件内容为本班所有同学的学号、姓名、操作系统课程成绩,要求采用有格式的存储格式;文件建立之后,能够对文件进行插入、删除、查找等操作。
二、实验相关知识简介
文件系统提供给用户程序的一组系统调用,如文件的建立、打开、关闭、撤消、读、写和控制等,通过这些系统调用用户能获得文件系统的各种服务。不同的系统提供给用户不同的对文件的操作手段,但所有系统一般都提供以下关于文件的基本操作:1.对整体文件而言
(1)打开(open)文件,以准备对该文件进行访问。
(2)关闭(close)文件,结束对该文件的使用。
(3)建立(create)文件,构造一个新文件。
(4)撤消(destroy)文件,删去一个文件。
(5)复制(copy)文件,产生一个文件副本。
2.对文件中的数据项而言
(1)读(read)操作,把文件中的一个数据项输入给进程。
(2)写(write)操作,进程输出一个数据项到文件中去。
(3)修改(update)操作,修改一个已经存在的数据项。
(4)插入(insert)操作,添加一个新数据项。
(5)删除(delete)操作,从文件中移走一个数据项。
三、设计思路及关键程序代码分析
#include
#include
#include
int NUM = 0;
struct student
{
char num[20]; // 学号
char nam[20]; // 姓名
int score; // 成绩
struct student * next;
};
typedef struct student Stu;
typedef Stu * STU;
void SaveConf(STU head);
void Menu(STU head);
void Choose(STU head);
void LoadConf(STU head);
void Create(STU head);
void Init(STU *head) //头节点初始化
{
(*head) = (STU)malloc(sizeof(Stu));
(*head)->next = NULL;
}
void LoadConf(STU head) //从文件加载信息至链表
{
int i = 1;
FILE *fp;
STU newstu;
STU p= head;
fp = fopen("text.txt","r+");
if(fp == NULL)
{
printf("文件不存在!已为您创建新文件!\n");
fp = fopen("text.txt","a+");
}
while(i > 0)
{
newstu = (STU)malloc(sizeof(Stu));
i = fscanf(fp,"%s %s %d\n",newstu->num,newstu->nam,&newstu->score);
if(i == -1)
{
free(newstu);
newstu = NULL;
break;
}
p = head;
while(p->next != NULL)
{
p = p->next;
}
p->next = newstu;
newstu->next = NULL;
}
p = NULL;
fclose(fp);
}
void Create(STU head) //插入信息
{
STU newstu;
STU p = head;
newstu = (STU)malloc(sizeof(Stu));
printf("请输入学号:");
scanf("%s",newstu->num);
printf("请输入姓名:");
scanf("%s",newstu->nam);
printf("请输入成绩:");
scanf("%d",&newstu->score);
while(p->next != NULL)
{
p = p->next;
}
p->next = newstu;
newstu->next = NULL;
char flag;
getchar();
printf("是否继续插入信息(y or n):");
scanf("%c",&flag);
if(flag=='y')
{
Create(head);
}
else
{
Choose(head);
}
}
void SaveConf(STU head) //保存信息到文件
{
FILE *fp;
STU p = head->next;
fp = fopen("text.txt","w");
if(fp == NULL)
{
printf("打开文件失败!\n");
return;
}
while(p != NULL)
{
fprintf(fp,"%s %s %d\n",p->num,p->nam,p->score); //写入数据到文件中
p = p->next;
}
fclose(fp);
}
STU search(STU head,char *s) //删除
{
STU p;
p = head->next;