第一范文网 - 专业文章范例文档资料分享平台

模拟Unix文件系统实验报告

来源:用户分享 时间:2025/5/28 15:01:35 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

#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文件系统实验报告 的文档
模拟Unix文件系统实验报告.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c6q2638vyy68mpoi7oh1u_5.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top