资源简介
为linux系统设计一个简单的二级文件系统。要求做到以下几点:
(1)可以实现下列几条命令(至少4条);
dir 列文件目录
create 创建文件
delete 删除文件
open 打开文件
close 关闭文件
read 读文件
write 写文件
(2)列目录时要列出文件名、物理地址、保护码和文件长度;
(3)源文件可以进行读写保护。
代码片段和文件信息
#include
#include
#include
#include
#include
#include “define.h“
/***************************************************************************************************************
创建文件系统
****************************************************************************************************************/
void create_file_system()
{
fp=fopen(file_system_name“wb+“); //以读写方式打开,如果存在,则覆盖原来信息,
if(fp==NULL) //否则创建该文件
{
cout<<“Create file system error!\n“< exit(1);
}
//申请空间
int total=sizeof(int)*(DIR_NUM+FILE_NUM+BLOCK_NUM+3)+sizeof(struct dir_node)*DIR_NUM+sizeof(struct file_node)*FILE_NUM+BLOCK_SIZE*BLOCK_NUM;
for(long len=0;len fputc(0fp);
fseek(fp0SEEK_SET); //写超级块信息
used_dir=1;
fwrite(&used_dirsizeof(int)1fp);
used_file=0;
used_block=0;
fwrite(&used_filesizeof(int)2fp);
dir_flag[0]=1;
fwrite(&dir_flag[0]sizeof(int)1fp); //标志对应目录节点、文件节点的使用情况
fwrite(&dir_flag[1]sizeof(int)DIR_NUM+FILE_NUM+BLOCK_NUM-1fp);
strcpy(dir[0].dir_name“A:“); //写根目录信息
dir[0].dir_count=0;
dir[0].file_count=0;
dir[0].parent=-1;
GetLocalTime(&dir[0].ctime); //获得当前时间
fwrite(&dir[0]sizeof(struct dir_node)1fp);
for(int i=0;i {
al_dir[i]=0;
al_dflag[i]=0;
dir[i].dir_count=0;
dir[i].file_count=0;
}
for(i=0;i {
al_file[i]=0;
al_fflag[i]=0;
open_files[i]=0;
}
for(i=0;i al_bflag[i]=0;
for(i=0;i buffer[i].flag=0;
fflush(fp);
fclose(fp);
}
/***************************************************************************************************************
搜索目录或文件,成功则返回该文件或目录的索引失败则返回-1,
type用来区分要搜索的是文件还是目录0表示目录,1表示文件,
index用来指定找到的文件或目录在父目录下的位置
****************************************************************************************************************/
int search(int parentchar *nameint typeint &index)
{
struct dir_node *p=&dir[parent];
int itemp;
if(type==0) //表示目录
for(i=0;idir_count;i++)
{
temp=p->child_dir[i];
if(strcmp(namedir[temp].dir_name)==0)// 字符串相等时
{
index=i;
return temp;
}
}
else
for(i=0;ifile_count;i++)//表示找文件
{
temp=p->child_file[i];
if(strcmp(namefile[temp].file_name)==0)
{
index=i;
return temp;
}
}
return -1;
}
/**********************************************************************************************
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 237620 2011-06-28 23:25 linux\Debug\os.exe
文件 291284 2011-06-28 23:25 linux\Debug\os.ilk
文件 71619 2011-06-28 23:25 linux\Debug\os.obj
文件 3732436 2011-06-28 23:24 linux\Debug\os.pch
文件 599040 2011-06-28 23:25 linux\Debug\os.pdb
文件 140288 2011-06-28 23:28 linux\Debug\vc60.idb
文件 86016 2011-06-28 23:25 linux\Debug\vc60.pdb
文件 4282 2011-02-16 18:01 linux\define.h
文件 34664 2011-06-28 23:25 linux\os.cpp
文件 3414 2011-06-28 23:30 linux\os.dsp
文件 512 2011-06-28 23:30 linux\os.dsw
文件 41984 2011-06-28 23:30 linux\os.ncb
文件 48640 2011-06-28 23:30 linux\os.opt
文件 1096 2011-06-28 23:25 linux\os.plg
文件 2337792 2009-09-06 20:32 linux\操作系统课程设计-模拟文件系统.doc
目录 0 2011-06-28 23:25 linux\Debug
目录 0 2011-06-28 23:30 linux
----------- --------- ---------- ----- ----
7630687 17
- 上一篇:本人收集的几款精选韩文字体
- 下一篇:Teamcenter 船舶解决方案PLM
评论
共有 条评论