⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 creat.c

📁 基于UNIX6的文件系统模拟程序
💻 C
字号:
#include <stdio.h>#include "filesys.h"creat(u_id,filename,mode)unsigned int u_id;char *filename;unsigned short mode;{	unsigned int di_ith,di_ino;	struct inode *inode;	int i,j;
	int user_id = getid(u_id);	di_ino=namei(filename);	if(di_ino != NULL) /* already existed */	{		inode=iget(di_ino);		if(access(user_id,inode,mode)==0)		{			iput(inode);			printf("\ncreat accessnot allowed\n");			return;		}		/* free all the block of the old file */		for(i=0;i<inode->di_size/BLOCKSIZ+1;i++)		{			bfree(inode->di_addr[i]);		}		/* to do :add code here to update the pointer of the sys_file */		for(i=0;i<SYSOPENFILE;i++)			if(sys_ofile[i].f_inode==inode)			{				sys_ofile[i].f_off=0;			}		for(i=0;i<NOFILE;i++)			if(user[user_id].u_ofile[i]==SYSOPENFILE+1)			{				user[user_id].u_uid=inode->di_uid;				user[user_id].u_gid=inode->di_gid;				for(j=0;j<SYSOPENFILE;j++)					if(sys_ofile[j].f_count=0)					{						user[user_id].u_ofile[i]=j;						sys_ofile[j].f_flag=mode;					}				return i;			}	}	else /*not existed before */	{		inode = ialloc();		di_ith = iname(filename);		dir.size++;


//		printf("dir.size:%d",dir.size);		dir.direct[di_ith].d_ino=inode->i_ino;		inode->di_mode=mode;//user[user_id].u_default_mode;

//		printf("mode:%d",mode);		inode->di_uid=user[user_id].u_uid;		inode->di_gid=user[user_id].u_gid;		inode->di_size=0;		inode->di_number=1;//0 I think 1 will be right here,so I got it changed		for(i=0;i<SYSOPENFILE;i++)			if(sys_ofile[i].f_count==0)				break;		for(j=0;j<NOFILE;j++)			if(user[user_id].u_ofile[j]==SYSOPENFILE+1)				break;		user[user_id].u_ofile[j]=i;		sys_ofile[i].f_flag=mode;		sys_ofile[i].f_count=0;		sys_ofile[i].f_off=0;		sys_ofile[i].f_inode=inode;		return j;	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -