亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? newfile.cpp

?? 這是我上個學(xué)期操作系統(tǒng)的課程設(shè)計
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
{                                                  //否則返回-1
	int parent,p=0,index;
	parent=get_parent(old_name,p);                 //跟對目錄重命名一樣
	if(parent==-1)
	{
		printf("Path name error!\n");
		return -1;
	}
	int file_id=search(parent,old_name+p,1,index);
	if(file_id==-1)
	{
		printf("The file not exist!\n");
		return -1;
	}
	if(strcmp(old_name+p,new_name)!=0 && search(parent,new_name,1,index)!=-1)
	{
		printf("File name repeated!\n");
		return -1;
	}
	strcpy(file[file_id].file_name,new_name);
	al_file[file_id]++;
	return file_id;
}

void del_file(int pos)                             //刪除文件,調(diào)用該函數(shù)的前提是已經(jīng)取得要刪除文件                   
{                                                  //的索引號
	return_block(pos);                             //釋放磁盤塊
	file_flag[pos]=0; 
	used_file--;
	al_fflag[pos]++;
	al_file[pos]=0;

	if(open_files[pos]>0)                          //如果已經(jīng)獲得緩沖區(qū),則立即釋放
	{
		int buf_id=get_buffer_id(pos);
		buffer[buf_id].flag=0;
		open_files[pos]=0;
	}
}

int del_file(int parent,char *file_name)           //在指定的目錄下刪除文件,刪除成功則返回文件的              
{                                                  //索引號,否則返回-1
	int del_pos,index;
	if((del_pos=search(parent,file_name,1,index))==-1)//搜索該文件是否存在,不存在則刪除失敗
	{
		printf("The file to delete not exist!\n");
		return -1;
	}
	del_file(del_pos);                             //開始刪除文件

	struct dir_node *p=&dir[parent];               //修改父目錄的控制信息
	if(p->file_count>=2)
	{
		int top=p->file_count-1;         	
		p->child_file[index]=p->child_file[top];
	}
	p->file_count--;
	al_dir[parent]++;

	return del_pos;
}

int delfile(char *name)                            //刪除文件的主調(diào)函數(shù)
{
	int parent,p=0;
	parent=get_parent(name,p);
	if(parent==-1)
	{
		printf("Path name error!\n");
		return -1;
	}
	return del_file(parent,name+p);
}

void del_dir(int pos)                              //刪除指定的目錄節(jié)點,該目錄已經(jīng)為空                     
{
	dir_flag[pos]=0;  
	used_dir--;
	al_dflag[pos]++;
	al_dir[pos]=0;
}

void del(int pos)                                  //刪除一個指定目錄及它下面的所有文件及所有目錄                           
{
	for(int i=0;i<dir[pos].file_count;i++)         //刪除當(dāng)前目錄下的所有文件
		del_file(dir[pos].child_file[i]);
	for(i=0;i<dir[pos].dir_count;i++)              //刪除子目錄
		del(dir[pos].child_dir[i]);
	del_dir(pos);                                  //刪除當(dāng)前目錄
}

void del_dir(int parent,int del_pos,int index)     //在一個指定的目錄下刪除一個目錄及它下面的所有                 
{                                                  //文件及所有目錄
	del(del_pos);                                  //開始刪除目錄
	if(dir[parent].dir_count>=2)                   //修改父目錄的控制信息
	{
		int top=dir[parent].dir_count-1;
		dir[parent].child_dir[index]=dir[parent].child_dir[top];
	}
	dir[parent].dir_count--;
	al_dir[parent]++;
}

void paste(int dir_id)                             //用于設(shè)置當(dāng)前路徑
{
	if(dir_id==0)
		return;
	paste(dir[dir_id].parent);
	strcat(curr_path,dir[dir_id].dir_name);
	strcat(curr_path,"/");
}

int change_dir(char *name)                         //改變工作目錄,成功則返回該目
{                                                  //錄的索引號,否則返回-1
	int parent,p=0,pos,index;
	if(strcmp(name,"/")==0)
		pos=0;
	else if(strcmp(name,"..")==0)
		pos=curr_dir->parent;
	else
	{	
		parent=get_parent(name,p);	
		if(parent==-1)	
		{		
			printf("Path name error!\n");		
			return -1;	
		}
		pos=search(parent,name+p,0,index);
	}
	if(pos==-1)                                    //如果該目錄不存在,則失敗
	{
		printf("The dictory not exist!\n");
		return -1;
	}
	curr_path[3]='\0';
	paste(pos);
	curr=pos;                                      //改變當(dāng)前目錄及路徑
	curr_dir=&dir[curr];                                                 
	return curr;                               
}

int count[DIR_NUM];                                //用于顯示目錄樹時用

void print_sp(int dir_id)                          //該函數(shù)用于打印|用,可以將目錄結(jié)構(gòu)以樹形
{                                                  //顯示
	if(dir_id<0)
		return;
	print_sp(dir[dir_id].parent);
	if(dir[dir_id].dir_count>count[dir_id])
		printf("|");
	else
		printf(" ");
	for(int i=0;i<6;i++)
		printf(" ");
}

void print_pre(int id,int type)                    //該函數(shù)在每打印一個目錄或文件名之前調(diào)用
{
	int parent,pre;
	if(type==0)
		parent=dir[id].parent;
	else
		parent=file[id].parent;
	pre=dir[parent].parent;
	print_sp(pre);
}

void print_file(int file_id)                       //打印文件名
{
	print_pre(file_id,1);
	printf("|");
	for(int i=0;i<6;i++)
		printf("_");
	printf("%s\n",file[file_id].file_name);
}

void print_dir(int dir_id)                         //打印目錄名
{
	print_pre(dir_id,0);
	printf("|");
	for(int i=0;i<6;i++)
		printf("_");
	printf("%s\057\n",dir[dir_id].dir_name);
	count[dir[dir_id].parent]++;
}

void print(int dir_id)                             //打印樹形結(jié)構(gòu)的核心函數(shù)
{
	print_dir(dir_id);
	for(int i=0;i<dir[dir_id].file_count;i++)
		print_file(dir[dir_id].child_file[i]);
	for(i=0;i<dir[dir_id].dir_count;i++)
		print(dir[dir_id].child_dir[i]);
}

void show_tree()                                   //打印樹形結(jié)構(gòu)的主調(diào)函數(shù)
{
	if(used_file==0 && used_dir==1)
	{
		printf("The file system is empty!\n");
		return;
	}
	printf("%s\057\n",dir[0].dir_name);
	for(int i=0;i<DIR_NUM;i++)
		count[i]=0;
	for(i=0;i<dir[0].file_count;i++)
		print_file(dir[0].child_file[i]);
	for(i=0;i<dir[0].dir_count;i++)
		print(dir[0].child_dir[i]);
}

void show_dir(int dir_id)                          //以下幾個函數(shù)用于顯示當(dāng)前目錄下面的目錄和文件,
{                                                  //跟上面不同的是,它不能顯示目錄及文件之間的關(guān)系,
	printf("%s",dir[dir_id].dir_name);             //但它可以顯示一些細(xì)節(jié),如創(chuàng)建時間,文件長度
	for(int i=strlen(dir[dir_id].dir_name);i<20;i++)
		printf(" ");
	printf("<DIR>");
	for(i=25;i<30;i++)
		printf(" ");
	printf("%d-%.2d-%.2d %.2d:%.2d:%.2d\n",dir[dir_id].ctime.wYear,dir[dir_id].ctime.wMonth,dir[dir_id].ctime.wDay,dir[dir_id].ctime.wHour,dir[dir_id].ctime.wMinute,dir[dir_id].ctime.wSecond);
}

void show_file(int file_id)                        //顯示一個文件
{
	printf("%s",file[file_id].file_name);
	for(int i=strlen(file[file_id].file_name);i<20;i++)
		printf(" ");
	printf("<FILE>");
	for(i=26;i<30;i++)
		printf(" ");
	printf("%d-%.2d-%.2d %.2d:%.2d:%.2d",file[file_id].ctime.wYear,file[file_id].ctime.wMonth,file[file_id].ctime.wDay,file[file_id].ctime.wHour,file[file_id].ctime.wMinute,file[file_id].ctime.wSecond);
	for(i=0;i<8;i++)
		printf(" ");
	int length=file[file_id].file_length;
	if(open_files[file_id]==2)                     //如果該文件已經(jīng)以寫的方式被打開,則需改變
	{
		int buf_id=get_buffer_id(file_id);
		length=buffer[buf_id].length;
	}
	printf("len: %d bytes\n",length);
}

void show(int dir_id)                              //顯示目錄及文件的核心函數(shù),用了遞歸思想                         
{
	for(int i=0;i<dir[dir_id].file_count;i++)
		show_file(dir[dir_id].child_file[i]);
	for(i=0;i<dir[dir_id].dir_count;i++)
		show_dir(dir[dir_id].child_dir[i]);
}

void list()                                        //顯示文件及目錄的主調(diào)函數(shù)
{ 
	show(curr);                                    //該函數(shù)的參數(shù)表示根目錄的索引
	printf("\n%d files.\n",curr_dir->file_count);  //統(tǒng)計文件數(shù)
	printf("\n%d dirs.\n",curr_dir->dir_count);    //統(tǒng)計目錄數(shù)
}

void write_bit(int pos,int type)                   //寫回目錄節(jié)點、文件節(jié)點或磁盤塊的占用標(biāo)志
{                                                  //type為0時,寫目錄;
	if(type==0)                                    //type為1時,寫文件;
	{                                              //type為2時,寫磁盤塊
		fseek(fp,sizeof(int)*(pos+3),SEEK_SET);    //該函數(shù)只有在創(chuàng)建和刪除時才調(diào)用
		fwrite(&dir_flag[pos],sizeof(int),1,fp);
	}
	else if(type==1)
	{
		fseek(fp,sizeof(int)*(DIR_NUM+pos+3),SEEK_SET);
		fwrite(&file_flag[pos],sizeof(int),1,fp);
	}
	else
	{		
		fseek(fp,sizeof(int)*(DIR_NUM+FILE_NUM+pos+3),SEEK_SET);
		fwrite(&block_flag[pos],sizeof(int),1,fp);
	}
}

void write_inode(int pos,int type)                 //寫回目錄或文件節(jié)點的控制信息        
{                                                  //type為0時,寫目錄;
	if(type==0)                                    //type為1時,寫文件;
	{                                              //有目錄或文件的控制信息被修改,該函數(shù)就被調(diào)用
		fseek(fp,sizeof(int)*(DIR_NUM+FILE_NUM+BLOCK_NUM+3)+sizeof(struct dir_node)*pos,SEEK_SET);
		fwrite(&dir[pos],sizeof(struct dir_node),1,fp);
	}
	else
	{
		fseek(fp,sizeof(int)*(DIR_NUM+FILE_NUM+BLOCK_NUM+3)+sizeof(struct dir_node)*DIR_NUM+sizeof(struct file_node)*pos,SEEK_SET);
		fwrite(&file[pos],sizeof(struct file_node),1,fp);
	}
}

void write_disk(int i,int j)                       //將緩沖區(qū)內(nèi)的數(shù)據(jù)寫回磁盤,這個函數(shù)較復(fù)雜
{                                                  //首先確定寫的開始位置
	int write_start=(file[i].file_length<buffer[j].offset)?file[i].file_length:buffer[j].offset;
	file[i].file_length=buffer[j].length;
	al_file[i]++;
	int block_start=write_start/BLOCK_SIZE;
	int block_offset=write_start%BLOCK_SIZE;
	int length=buffer[j].length-write_start;
	int extra=buffer[j].length%BLOCK_SIZE;

	fseek(fp,sizeof(int)*(DIR_NUM+FILE_NUM+BLOCK_NUM+3)+sizeof(struct dir_node)*DIR_NUM+sizeof(struct file_node)*FILE_NUM+file[i].block[block_start]*BLOCK_SIZE+block_offset,SEEK_SET);					
	fwrite(buffer[j].buf+write_start,BLOCK_SIZE-block_offset,1,fp);
	for(int k=block_start+1;k<file[i].block_count-1;k++)			
	{					
		fseek(fp,sizeof(int)*(DIR_NUM+FILE_NUM+BLOCK_NUM+3)+sizeof(struct dir_node)*DIR_NUM+sizeof(struct file_node)*FILE_NUM+file[i].block[k]*BLOCK_SIZE,SEEK_SET);					
		fwrite(buffer[j].buf+BLOCK_SIZE*k,BLOCK_SIZE,1,fp);
	}                        
	if(extra>0 && length>BLOCK_SIZE)                       
	{					        
		fseek(fp,sizeof(int)*(DIR_NUM+FILE_NUM+BLOCK_NUM+3)+sizeof(struct dir_node)*DIR_NUM+sizeof(struct file_node)*FILE_NUM+file[i].block[k]*BLOCK_SIZE,SEEK_SET);					        
		fwrite(buffer[j].buf+BLOCK_SIZE*k,extra,1,fp);                        
	}
}

void savefile(int file_id)                         //顯式保存文件的核心函數(shù)
{
	if(open_files[file_id]>0)                      //如果占用緩沖區(qū),應(yīng)該釋放                     
	{
		int buf_id=get_buffer_id(file_id);
		if(open_files[file_id]==2)                 //如果該文件以寫的方式被打開,應(yīng)先將其數(shù)據(jù)
			write_disk(file_id,buf_id);            //寫回磁盤
		buffer[buf_id].flag=0;		
		open_files[file_id]=0;
	}
	if(al_fflag[file_id]%2!=0)                     //如果創(chuàng)建或刪除,需要寫回磁盤	
	{					
		write_bit(file_id,1);		
		al_fflag[file_id]=0;	
	}
	if(al_file[file_id]>0)                         //如果控制信息被修改,需要寫回磁盤
	{	
		write_inode(file_id,1);	
		al_file[file_id]=0;
		for(int i=0;i<file[file_id].block_count;i++)		
		{			
			int temp=file[file_id].block[i];			
			if(al_bflag[temp]%2!=0)                //如果磁盤塊被釋放或被占用,需要寫回磁盤			
			{				
				write_bit(temp,2);				
				al_bflag[temp]=0;
			}
		}
	}
}

void save_dir(int dir_id)                          //保存空目錄函數(shù)
{
	if(al_dflag[dir_id]%2!=0)                      //如果刪除或創(chuàng)建,需要寫回磁盤	
	{		
		write_bit(dir_id,0);			
		al_dflag[dir_id]=0;	
	}
	if(al_dir[dir_id]>0)                           //如果控制信息被修改,需要寫回磁盤		
	{
		write_inode(dir_id,0);		
		al_dir[dir_id]=0;
	}
}

void savedir(int dir_id)                           //保存一個目錄,及它的所有父目錄,用了遞歸
{
	if(dir_id==-1)
		return;
	save_dir(dir_id);
	savedir(dir[dir_id].parent);
}

void save(int dir_id)                              //保存一個目錄及它下面的所有目錄及文件
{                                                  //用了遞歸
	for(int i=0;i<dir[dir_id].dir_count;i++)
		save(dir[dir_id].child_dir[i]);
	for(i=0;i<dir[dir_id].file_count;i++)
		savefile(dir[dir_id].child_file[i]);
	save_dir(dir_id);
}

int save_file(int parent,char *file_name)          //顯式保存文件
{
	int pos,index;
	if((pos=search(parent,file_name,1,index))==-1)
	{
		printf("The file not exist in current directory!\n");
		return -1;
	}
	savedir(parent);                               //保存父目錄
	savefile(pos);
	return pos;
}

int savefile(char *name)                           //保存文件的主調(diào)函數(shù)                        
{
	int parent,p=0;
	parent=get_parent(name,p);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩avvvv在线播放| 日韩理论在线观看| 日韩**一区毛片| 欧美剧情片在线观看| 丝袜脚交一区二区| www久久精品| 成人少妇影院yyyy| 一区二区三国产精华液| 欧美日韩免费高清一区色橹橹| 亚洲一区成人在线| 91麻豆精品国产无毒不卡在线观看 | 国产欧美日韩精品在线| 成人av网站在线| 亚洲综合在线五月| 日韩午夜电影av| 国产高清视频一区| 亚洲精品免费在线观看| 91精品国产综合久久精品性色| 韩国欧美国产1区| 亚洲另类中文字| 欧美大胆人体bbbb| 91小视频免费观看| 日韩av一区二区在线影视| 久久久久久久久99精品| 一本大道久久a久久综合婷婷| 日韩影院免费视频| 国产精品伦理在线| 91精品国产综合久久香蕉的特点 | 国产一区二区三区在线观看免费视频 | 日日噜噜夜夜狠狠视频欧美人| 欧美大白屁股肥臀xxxxxx| 97se亚洲国产综合自在线| 视频一区二区国产| 亚洲欧洲日本在线| 精品欧美一区二区三区精品久久 | 国产黄人亚洲片| 亚洲国产中文字幕在线视频综合| 久久综合色婷婷| 欧洲视频一区二区| 成人综合婷婷国产精品久久免费| 午夜精品aaa| 亚洲欧美一区二区三区久本道91 | 久久精品水蜜桃av综合天堂| 欧美综合久久久| 成人午夜碰碰视频| 国产真实乱子伦精品视频| 亚洲一区在线观看视频| 国产精品久久久久久亚洲毛片 | 国产精品素人视频| 日韩午夜电影av| 欧美网站大全在线观看| 不卡高清视频专区| 国产精品资源在线观看| 七七婷婷婷婷精品国产| 亚洲综合激情另类小说区| 中文字幕一区二区三区在线不卡 | 中文字幕一区二区三区色视频| 欧美成人女星排名| 欧美一二三区精品| 欧美精品日韩一本| 欧美日韩一区二区在线观看 | 欧美卡1卡2卡| 欧美日韩国产色站一区二区三区| av电影一区二区| 成人va在线观看| 国产a精品视频| 福利一区福利二区| 国产黄人亚洲片| 国产成人午夜精品影院观看视频 | 久久国产免费看| 蜜桃精品在线观看| 免费久久精品视频| 日韩黄色在线观看| 久久99精品视频| 美女久久久精品| 久久se精品一区精品二区| 开心九九激情九九欧美日韩精美视频电影| 亚洲高清免费在线| 亚洲第一av色| 日本不卡一区二区三区高清视频| 日韩成人免费看| 老司机精品视频在线| 韩国一区二区在线观看| 国产999精品久久久久久绿帽| 国产精选一区二区三区| 成人深夜福利app| 一本一道久久a久久精品综合蜜臀| 91视频www| 欧美日韩午夜在线视频| 日韩视频国产视频| 久久久影院官网| 国产精品五月天| 一区二区视频在线| 亚洲成人精品一区二区| 久久成人综合网| 成人av在线看| 在线观看国产精品网站| 日韩视频一区二区在线观看| 久久精品欧美一区二区三区不卡| 日本一二三不卡| 亚洲香肠在线观看| 奇米影视一区二区三区| 国产999精品久久久久久| 一本色道a无线码一区v| 欧美乱妇15p| 久久久三级国产网站| 国产精品国产馆在线真实露脸 | 国产精品 欧美精品| 91黄视频在线观看| 欧美一区日本一区韩国一区| 久久精品水蜜桃av综合天堂| 一区二区三区日韩精品视频| 蜜臀久久久久久久| www.欧美日韩| 日韩亚洲欧美中文三级| 国产精品网站在线| 奇米色一区二区| 99精品在线免费| 日韩免费视频一区二区| 亚洲欧洲成人精品av97| 日韩精品午夜视频| kk眼镜猥琐国模调教系列一区二区| 欧美视频一区二区三区四区| 国产欧美精品区一区二区三区 | 亚洲国产婷婷综合在线精品| 久久国产精品免费| 色欧美片视频在线观看在线视频| 欧美va亚洲va| 一区二区三区中文在线| 国产91丝袜在线18| 欧美一卡二卡在线观看| 亚洲欧美日韩国产另类专区| 国产自产高清不卡| 在线不卡一区二区| 亚洲色图一区二区三区| 国产一区日韩二区欧美三区| 欧美性极品少妇| 国产精品久久国产精麻豆99网站| 麻豆国产精品一区二区三区| 91久久精品网| 中文字幕成人网| 国产大陆精品国产| 精品国产在天天线2019| 亚洲va欧美va国产va天堂影院| av一区二区三区黑人| 久久中文娱乐网| 美美哒免费高清在线观看视频一区二区| 99国产欧美另类久久久精品| 国产日产欧美一区二区三区 | 国产成人免费在线观看| 欧美成人性福生活免费看| 日韩福利视频导航| 欧美日韩日日骚| 夜夜精品视频一区二区| 99在线精品视频| 亚洲国产精品高清| 高清成人在线观看| 国产欧美一区二区精品性色| 国产又粗又猛又爽又黄91精品| 日韩一区二区三区视频| 麻豆精品视频在线| 日韩一区二区免费在线观看| 蜜桃视频在线一区| 精品免费99久久| 激情欧美一区二区| 久久九九全国免费| 国产91精品精华液一区二区三区| 久久精品视频在线免费观看| 精品一区二区三区免费观看| 久久尤物电影视频在线观看| 国产制服丝袜一区| 国产精品美女久久福利网站| 成人一道本在线| 亚洲欧美日韩久久精品| 欧美亚洲动漫制服丝袜| 日韩av电影一区| 日韩欧美一卡二卡| 国产一区二区免费在线| 亚洲国产精品黑人久久久| 91在线观看成人| 亚洲综合在线第一页| 欧美一区二区视频免费观看| 蜜臀精品久久久久久蜜臀| 久久久久国产精品人| 成人晚上爱看视频| 亚洲精品成人精品456| 欧美人妇做爰xxxⅹ性高电影| 免费的国产精品| 久久精品欧美日韩精品| 色综合久久九月婷婷色综合| 首页综合国产亚洲丝袜| 久久麻豆一区二区| 色婷婷精品久久二区二区蜜臀av| 午夜精品在线看| 久久青草国产手机看片福利盒子 | 在线视频一区二区三区| 蜜臀精品一区二区三区在线观看 | 中文字幕电影一区| 欧美色窝79yyyycom| 国内偷窥港台综合视频在线播放|