os操作系统实验指导(9)

2019-08-31 15:43

switch(mode) {

case READ:

if (inode->di_mode&ODIREAD) return 1;

if ((inode->di_mode&GDIREAD)&&(user[k].u_gid==inode->di_gid)) return 1; if ((inode->di_mode&UDIREAD)&&(user[k].u_uid==inode->di_uid)) return 1; return 0; case WRITE:

if (inode->di_mode &ODIWRITE) return 1;

if((inode->di_mode &GDIWRITE)&&(user[k].u_gid==inode->di_gid)) return 1; if((inode->di_mode&UDIWRITE)&&(user[k].u_uid==inode->di_uid)) return 1; return 0; case EXICUTE:

if (inode->di_mode &ODIEXICUTE) return 1;

if((inode->di_mode&GDIEXICUTE)&&(user[k].u_gid==inode->di_gid)) return 1; if((inode->di_mode&UDIEXICUTE)&&(user[k].u_uid== inode->di_uid)) return 1; return 0;

case FAPPEND: return 1;

case DEFAULTMODE: return 1; default:

return 0; } }

12、显示列表函数dir( )和目录创建函数mkdir( )等(文件名dir.c)

#include \#include \#include \_dir( ) /*dir*/ { unsigned int di_mode; int i,j,one;

struct inode *temp_inode;

printf(\

for(i=0;i

if(!(strcmp(dir.direct[i].d_name,\ {

dir.size = i; break; }

}

for(i=0;i

if (dir.direct[i].d_ino!=DIEMPTY) {

printf(\

,dir.direct[%d].d_ino

性:\ temp_inode=iget(dir.direct[i].d_ino); di_mode=temp_inode->di_mode;

for(j=0;j<12;j++) { one=di_mode%2; di_mode=di_mode/2; if (one) printf(\ else printf(\ }

if(temp_inode->di_mode & DIFILE)

{ printf(\ printf(\

for(j=0;jdi_size/BLOCKSIZ+1;j++) printf(\

printf(\ } else

printf(\

iput(temp_inode); } } }

mkdir(dirname) /*mkdir*/

=

%d,

char *dirname; { int dirid,dirpos; struct inode *inode;

struct direct buf[BLOCKSIZ/(DIRSIZ+2)]; unsigned int block;

memset(buf,0,(BLOCKSIZ/(DIRSIZ+2))*sizeof(struct direct)); dirid=namei(dirname);

if(dirid!=NULL) { inode=iget(dirid); if (inode->di_mode&DIDIR)

printf(\ else

printf(\ iput(inode); return; }

dirpos=iname(dirname); inode=ialloc( );

// inode->i_ino=dirid;

dir.direct[dirpos].d_ino=inode->i_ino; dir.size++;

/* fill the new dir buf*/ strcpy(buf[0].d_name,\buf[0].d_ino=inode->i_ino; strcpy(buf[1].d_name,\

buf[1].d_ino=cur_path_inode->i_ino;

block=balloc( );

fseek(fd,DATASTART+block*BLOCKSIZ,SEEK_SET); fwrite(buf,1,BLOCKSIZ,fd);

inode->di_size=2*sizeof(struct direct); inode->di_number=1;

inode->di_mode=user[user_id].u_default_mode; inode->di_uid=user[user_id].u_uid|DIDIR;

inode->di_gid=user[user_id].u_gid; inode->di_addr[0]=block;

iput(inode); return; }

chdir(dirname) /*chdir*/ char *dirname;

{ unsigned int dirid; struct inode *inode; unsigned short block; int i,j,low=0,high=0; dirid=namei(dirname);

if(dirid==NULL)

{ printf(\ return ; }

inode=iget(dir.direct[dirid].d_ino);

if(!access(user_id,inode,user[user_id].u_default_mode)) { printf(\ iput(inode); return ; }

/*pack the current directory for(i=0;i

printf(\ if (dir.direct[j].d_ino==0) break; }

printf(\ memcpy(&dir.direct[i],&dir.direct[j],DIRSIZ+2); dir.direct[j].d_ino=0; } */

/* write back the current directory */

//for(i=0;idi_size/BLOCKSIZ+1;i++) // bfree(cur_path_inode->di_addr[i]);

for(i=0;i0) {

block=balloc( );

cur_path_inode->di_addr[i]=block;

fseek(fd,DATASTART+block*BLOCKSIZ,SEEK_SET); fwrite(&dir.direct[i],1,BLOCKSIZ,fd); } else {

fseek(fd,DATASTART+cur_path_inode->di_addr[0]*BLOCKSIZ,SEEK_SET); fwrite(&dir.direct[0],1,BLOCKSIZ,fd); } }

cur_path_inode->di_size=dir.size*(sizeof(struct direct)); iput(cur_path_inode); cur_path_inode=inode;

/* read the change dir from disk */ j=0;

for(i=0;idi_size/BLOCKSIZ+1;i++) {

fseek(fd,DATASTART+ inode->di_addr[i]*BLOCKSIZ,SEEK_SET); fread(&dir.direct[j],1,BLOCKSIZ,fd); j+=BLOCKSIZ/(DIRSIZ+2); } return; }

13、文件创建函数 creat( ) ( 文件名creat.c)

#include \#include \

creat(user_id,filename,mode) unsigned int user_id; char *filename; unsigned short mode; {

unsigned int di_ith,di_ino; struct inode *inode; int i,j,k,user_p;


os操作系统实验指导(9).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:六年级下册英语素材-英语名词单复数变化规律及练习题 - 通用版

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

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