云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 操作系统实验文件系统设计

操作系统实验文件系统设计

  • 62 次阅读
  • 3 次下载
  • 2025/6/3 3:37:20

if(block_end_flag) { fseek(fd,DINODESTART+cur_di*DINODESIZ,SEEK_SET); fread(block_buf,1,BLOCKSIZ,fd); block_end_flag=0; i=0; } while(block_buf[i].di_mode==DIEMPTY) { cur_di++; i++; } if(i==NICINOD) block_end_flag=1; else { filsys.s_inode[filsys.s_pinode--]=cur_di; count++; } } filsys.s_rinode=cur_di; } temp_inod=iget(filsys.s_inode[filsys.s_pinode]); fseek(fd,DINODESTART+filsys.s_inode[filsys.s_pinode]*DINODESIZ,SEEK_SET); fwrite(&temp_inod->di_number,1,sizeof(struct dinode),fd); filsys.s_pinode++; filsys.s_ninode--; filsys.s_fmod=SUPDATE; return temp_inod; }

ifree(dinodeid) //ifree unsigned dinodeid; { filsys.s_ninode++; if(filsys.s_pinode!=NICINOD) { // not full filsys.s_inode[filsys.s_pinode]=dinodeid; filsys.s_pinode++; } else { // full if(dinodeid

9.磁盘块分配与释放函数balloc()与bfree()(文件名ballfre.c) #include #include \

static unsigned int block_buf[BLOCKSIZ];

unsigned int balloc() { unsigned int free_block,free_block_num; int i; if(filsys.s_nfree==0) { printf(\ return DISKFULL; } free_block=filsys.s_free[filsys.s_pfree]; if(filsys.s_pfree==NICFREE-1) {

fseek(fd,DATASTART+(562-filsys.s_nfree)*BLOCKSIZ,SEEK_SET); fread(block_buf,1,BLOCKSIZ,fd); free_block_num=block_buf[NICFREE]; // the total number in the group for(i=0;i

bfree(block_num)

unsigned int block_num; { int i; if(filsys.s_free==0) { //s_free full block_buf[NICFREE]=NICFREE; for(i=0;i

10.搜索函数namei()和iname()(文件名name.c) #include #include #include %unsigned int namei(name) //namei char *name; { int i,notfound=1; for(i=0;((i

unsigned int iname(name) //iname char *name; { int i,notfound=1; for(i=0;((i

strcpy(dir.direct[i].d_name,name); dir.direct[i].d_ino=1; return i; } }

11.访问控制函数access()(文件名access.c) #include #include \

unsigned int access(user_id,inode,mode) unsigned int user_id; struct inode *inode; unsigned short mode; { switch(mode) { case READ: if(inode->di_mode&ODIREAD) return 1; if((inode->di_mode&GDIREAD) &&(user[user_id].u_gid==inode->di_gid))return 1; if((inode->di_mode&UDIREAD) &&(user[user_id].u_uid==inode->di_uid))return 1; return 0; case WRITE: if(inode->di_mode&ODIWRITE) return 1; if((inode->di_mode&GDIWRITE) &&(user[user_id].u_gid==inode->di_gid))return 1; if((inode->di_mode&UDIWRITE) &&(user[user_id].u_uid==inode->di_uid)) return 1; return 0; case EXECUTE: if(inode->di_mode&ODIEXECUTE) return 1; if((inode->di_mode&GDIEXICUTE) &&(user[user_id].u_gid==inode->di_gid)) return 1; if((inode->di_mode&UDIEXICUTE) &&(user[user_id].u_uid==inode->di_uid)) return 1; return 0; case DEFAULTMODE: return 1; default: return 0; } }

12.显示列表函数_dir()和目录创建函数mkdir()等(文件名dir.c) #include #include #include \_dir() // _dir { unsigned short di_mode; int i,j,k,one; struct inode *temp_inode; printf(\ for(i=0;idi_mode;

if(temp_inode->di_mode&DIFILE) printf(\ else printf(\ for(j=0;j<9;j++) { one=di_mode%2; di_mode=di_mode/2; if(one) printf(\ } if(temp_inode->di_mode&DIFILE) { printf(\ printf(\ for(k=0;kdi_size/BLOCKSIZ+1;k++) printf(\ printf(\ } else printf(\ iput(temp_inode); } } }

mkdir(dirname) // mkdir char *dirname; { int dirid,dirpos; struct inode *inode; struct direct buf[BLOCKSIZ/(DIRSIZ+2)]; unsigned int block; dirid=namei(dirname); if(dirid!=0) { inode=iget(dirid); if(inode->di_mode&DIDIR) printf(\ else printf(\ iput(inode); return; } dirpos=iname(dirname); inode=ialloc(); dirid=inode->i_ino; dir.direct[dirpos].d_ino=inode->i_ino; dir.size++;

// fill the new dir buf strcpy(buf[0].d_name, \ buf[0].d_ino=dirid; strcpy(buf[1].d_name, \ buf[1].d_ino=cur_path_inode->i_ino; buf[2].d_ino=0; block=balloc(); fseek(fd,DATASTART+block*BLOCKSIZ,SEEK_SET); fwrite(buf,1,BLOCKSIZ,fd); inode->di_size=2*(DIRSIZ+2); inode->di_number=1; inode->di_mode=user[user_id].u_default_mode|DIDIR; inode->di_uid=user[user_id].u_uid; inode->di_gid=user[user_id].u_gid; inode->di_addr[0]=block;

搜索更多关于: 操作系统实验文件系统设计 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

if(block_end_flag) { fseek(fd,DINODESTART+cur_di*DINODESIZ,SEEK_SET); fread(block_buf,1,BLOCKSIZ,fd); block_end_flag=0; i=0; } while(block_buf[i].di_mode==DIEMPTY) { cur_di++; i++; } if(i==NICINOD) block_end_flag=1; else { filsys.s_inode[filsys.s_pinode--]=cur_di; count++; } } filsys.s_rinode=cur_di; } temp_inod=iget(filsys.s_inode[

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com