基础定义:
文件系统就是在存储设备上组织文件的方法。而存储设备就是常见的磁盘,也有基于NAND Flash的固态硬盘等。对于组织文件的方法又分为命名文件及放置文件的逻辑存储和恢复等。文件管理系统则是操作系统中负责管理和存储文件信息的软件结构、简称文件系统、系统由三部分组成:文件系统的接口,对对象操纵和管理的软件集合,对象及属性。说的直白一些就是说文件系统就是在物理磁盘上进行文件的存储以及修改保护等操作、一系列的流程可以简化为文件的建立,存入,读出,修改,以及一些权限的控制等操作。//比如windows下的NTFS或者FAT32系统,他们的文件命名,以及文件的
具体的功能实现:
文件的系统是操作系统用于明确磁盘或分区上的文件的方法和数据结构;即在磁盘上组织文件的方法。也指用于存储文件的磁盘或分区,或文件系统种类。因此,可以说"我有2个文件系统"意思是他有2个分区,一个存文件,或他用 "扩展文件系统",意思是文件系统的种类。
从代码看原理:
既然是编程人员,代码往往是帮助别人理解的最好方法。下面就给大家看看文件系统的代码,让大家理解一下。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
#include"blockinodesuperblock.h"
//-----------------------
intmain()
{
control.open(
"control.txt"
,ios::in|ios::out|ios::nocreate);
inti;
control>>i;
control.close();
if
(i!=0)
//不为0就初始化
{
initial();
}
control.open(
"control.txt"
,ios::in|ios::out|ios::nocreate);
control.seekp(0);
control<<0;
//默认是上次基础上继续下去不用再初始化
control.close();
strcpy
(curname,
"root"
);
//当前目录文件名为root
road[0]=0;
//当前目录路径(存放从根目录到这里的结点号)
num=1;
//最后位road[num-1]为当前目录文件i结点号
cout<<
"请登陆系统\n"
;
while
(!login())
//登陆为止
cout<<
"wrong!!!\n"
;
cout<<
"loginsuccess"
<<endl;
cout<<
"******Welcome"
<<auser<<
"******"
;
readsuper();
getcommand();
//命令解析函数
writesuper();
return0;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
intialloc()
//申请一个i结点返回结点号否则返回-1
{
if
(superblock.fiptr>0)
{
inttemp=superblock.fistack[80-superblock.fiptr];
//当前可用
superblock.fistack[80-superblock.fiptr]=-1;
superblock.fiptr--;
returntemp;
}
return
-1;
}
//----------------------
voidifree(intindex)
//指定一个结点号,回收一个i结点
{
disk.open(
"disk.txt"
,ios::in|ios::out|ios::nocreate);
//清空结点
disk.seekp(514+64*index+2*(index/8));
disk<<setw(64)<<
''
;
disk.close();
for
(inti=80-superblock.fiptr;i<80;i++)
//结点号找到合适位置插入空闲结点号栈
{
if
(superblock.fistack<index)
//小于它的前移一位
{
superblock.fistack[i-1]=superblock.fistack;
}
else
//放在第一个大于它的结点号前面
{
superblock.fistack[i-1]=index;
break
;
}
}
superblock.fiptr++;
}
//----------------------
/*成组链接法*/
intballoc()
//申请一个盘块返回盘块号否则返回-1
{
inttemp=superblock.fbstack[10-superblock.fbptr];
if
(superblock.fbptr==1)
//是栈底了==>;是记录盘块了
{
//是最后记录盘块最后号0(保留作栈底分配不成功)
if
(temp==0)
{
return
-1;
}
suprblock.fbstack[10-superblock.fbptr]=-1;
superblock.fbptr=0;
//盘块内容读入栈
for
(inti=0;i<10;i++)
{
intid,num=0;
disk.open(
"disk.txt"
,ios::in|ios::out|ios::nocreate);
//先计算盘块内容个数num(最多10),最后盘块可能不到10个
disk.seekg(514*temp);
for
(inti=0;i<10;i++)
{
disk>>id;
num++;
if
(id==0)
break
;
}
disk.seekg(514*temp);
//盘块内容读入栈
for
(intj=10-num;j<10;j++)
{
disk>>id;
superblock.fbstack[j]=id;
}
superblock.fbptr=num;
disk.close();
}
disk.open(
"disk.txt"
,ios::in|ios::out|ios::nocreate);
//清空回收盘块
disk.seekp(514*temp);
disk<<setw(512)<<
''
;
disk.close();
//盘块使用掉
returntemp;
}
else
//不是记录盘块==>;盘块使用掉
{
superblock.fbstack[10-superblock.fbptr]=-1;
superblock.fbptr--;
returntemp;
}
|
常见的文件系统简介
以上文章的内容是我理解后借阅资料整合出来的希望对你有所帮助。