模拟Unix文件系统实验报告

2026/4/30 3:57:21

#include\#include\#include\#include\#include

void getfid(struct list ls) {

int il=0,ki=0,lfb=-1,lfc=-1; f_inode[lfd].f_offest=0; while(il<50){

if(f_inode[il].mi!=NULL){

if(((short)f_inode[il].mi->iid)==ls.ib) {

lfb=il; break; }

}else if(ki==0){ lfc=il; ki=1; } il++; }

if(lfc>=0&&lfb<0){

f_inode[lfc].mi=i_get(ls.ib); f_inode[lfc].f_flag=06; f_inode[lfc].f_offest=0; f_inode[lfc].f_count=1; lff=lfd; lfd=lfc;

}else if(lfb>=0){

f_inode[lfb].f_count=1;

if((f_inode[lfb].mi->in.fmode&01000)>0){ f_inode[lfb].f_offest=0; }

lff=lfd; lfd=lfb; }else { lfb=-1; } }

int l_readf( int fd,void *buf, int count)

{

unsigned short seek=(unsigned short)f_inode[fd].f_offest%B_size; int b=0;

if(f_inode[fd].f_offestin.fsize&&f_inode[fd].mi->in.fsize!=0){

b=getblock(f_inode[fd].f_offest/B_size,f_inode[fd].mi->in); unsigned short m=(unsigned short)count; int bd=bread(b,seek, m,buf ); return bd; } return 0; }

int readf(int fd, char *buf, int count) {

if((f_inode[fd].f_flag&04)>0){ int fi=f_inode[fd].f_offest;

if(f_inode[fd].f_offest+count>f_inode[fd].mi->in.fsize) {

count=f_inode[fd].mi->in.fsize - f_inode[fd].f_offest; }

int t=B_size-f_inode[fd].f_offest%B_size; if(t>=count){

f_inode[fd].f_offest=f_inode[fd].f_offest+l_readf(fd,buf,count); }else{

int i=0;

if(t

f_inode[fd].f_offest=f_inode[fd].f_offest+l_readf(fd,buf,t); count=count-t; i=t; }

while(count>0) {

if(count>B_size){

f_inode[fd].f_offest=f_inode[fd].f_offest+l_readf(fd,(buf+i),B_size); count=count-B_size; i=i+B_size; } else{

f_inode[fd].f_offest=f_inode[fd].f_offest+l_readf(fd,(buf+i),count); i=i+count; count=0;

} } }

fi=f_inode[fd].f_offest-fi; return fi; }

return 0; }

int l_writef(int fd,const void *buf, int count) {

unsigned short seek=(unsigned short)f_inode[fd].f_offest%B_size; int b=0; int bd=0;

b=getblock(f_inode[fd].f_offest/B_size,f_inode[fd].mi->in); unsigned short m=(unsigned short)count; bd=bwrite(b,seek, m,buf ); return bd; }

int writef(int fd, const char *buf, int count) {

if((f_inode[fd].f_flag&02)>0) {

int fi=f_inode[fd].f_offest;

if(f_inode[fd].f_offest+count>f_inode[fd].mi->in.fsize) {

ifadd(f_inode[fd].f_offest+count-f_inode[fd].mi->in.fsize,f_inode[fd].mi); f_inode[fd].f_offest=fi; }

int t=B_size-f_inode[fd].f_offest%B_size; if(t

if(t

f_inode[fd].f_offest=f_inode[fd].f_offest+l_writef(fd,buf,t); count=count-t; i=t; }

while(count>0) {

if(count>B_size){

f_inode[fd].f_offest=f_inode[fd].f_offest+l_writef(fd,(buf+i),B_size);

count=count-B_size; i=i+B_size; } else{

f_inode[fd].f_offest=f_inode[fd].f_offest+l_writef(fd,(buf+i),count); i=i+count; count=0; } } } else{

f_inode[fd].f_offest=f_inode[fd].f_offest+l_writef(fd,buf,count); }

fi= f_inode[fd].f_offest-fi; return fi; }

return 0; }

int search(char *fname,int si) {

int j=0;

if(f_inode[lfd].mi!=NULL){ struct list ls;

if((f_inode[lfd].mi->in.fmode&01000)>0){ f_inode[lfd].f_offest=0;

while(jin.fsize) {

readf(lfd,&ls,16);

if(strcmp(ls.ls_name,fname)==0) {

getfid(ls); return FOUND; }

j=j+si; } } }

return NOFOUND; }

int iname(char *route)


模拟Unix文件系统实验报告.doc 将本文的Word文档下载到电脑
搜索更多关于: 模拟Unix文件系统实验报告 的文档
相关推荐
相关阅读
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 10

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219