#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_offest
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(j readf(lfd,&ls,16); if(strcmp(ls.ls_name,fname)==0) { getfid(ls); return FOUND; } j=j+si; } } } return NOFOUND; } int iname(char *route)
相关推荐: