📄 open.c
字号:
#include <stdio.h>#include "filesys.h"unsigned short open(u_id,filename,openmode)
int u_id;
char *filename;unsigned short openmode;{ unsigned int dinodeid; struct inode *inode; int i,j;
int user_id = getid(u_id); dinodeid = namei(filename); if(dinodeid == NULL) /* no such file */ { printf("\nfile does not existed!!\n"); return NULL; } inode = iget(dinodeid); if(!access(user_id,inode,openmode)) /* access denied */ { printf("\nfile open has no access !!"); iput(inode); return NULL; } /* alloc the sys_ofile item */ for(i=1;i<SYSOPENFILE;i++) if(sys_ofile[i].f_count == 0) break; if(i==SYSOPENFILE) { printf("\nsystem open file too much\n"); iput(inode); return NULL; } sys_ofile[i].f_inode = inode; sys_ofile[i].f_flag = openmode; sys_ofile[i].f_count=1; if(openmode&FAPPEND) sys_ofile[i].f_off=inode->di_size; else sys_ofile[i].f_off=0; /* alloc the user open file item */ for(j=0;j<NOFILE;j++) if(user[user_id].u_ofile[j]==SYSOPENFILE + 1) break;//0 if(j==NOFILE) { printf("\nuser open file too much!!\n"); sys_ofile[i].f_count=0; iput(inode); return NULL; } user[user_id].u_ofile[j]=i; /* if APPEND, free the block of the file before if(openmode & FAPPEND) { for(i=0;i<inode->di_size/BLOCKSIZ+1;i++) bfree(inode->di_addr[i]); inode->di_size=0; }*/ return j;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -