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

📄 buf.c

📁 一个完整的SHELL实现源代码
💻 C
字号:
#include "fs.h"

char g_buffers[NBUF][514];
buf g_buf[NBUF];

static s_int lastb=0;

/* bread(bno)
   ==========
   find a buffer that contains the bno block.
   read from disc when not found.
*/
void *bread(s_int bno)
{
	s_int i;
	for(i=0;i<NBUF;i++)
		if((g_buf[i].flags&B_READ) && g_buf[i].blkno==bno)
		{
			/*g_buf[i].flags|=B_READ;*/
			return g_buffers[i];
		}
	i=lastb;
	lastb=(i+1)%NBUF;

	/* if block changed, write back */
	if(g_buf[i].flags & B_READ)
	{
		hd_write(g_buf[i].blkno,g_buffers[i]);
		g_buf[i].flags &= ~B_READ;
	}

	if(!hd_read(bno,g_buffers[i]))
		panic("bread(): hd_read failed.");
	g_buf[i].blkno=bno;
	g_buf[i].flags|=B_READ;
	return g_buffers[i];
}

s_int bwrite_back()
{
	s_int i;
	for(i=0;i<NBUF;i++)
	{
       	if(g_buf[i].flags & B_READ)
		{
			hd_write(g_buf[i].blkno,g_buffers[i]);
			g_buf[i].flags &= ~B_READ;
       	}
	}
	return 0;
}
/* buf_init()
   ==========
   initialize the g_buf array
*/
s_int buf_init()
{
	s_int i;
	for(i=0;i<NBUF;i++)
	{
		g_buf[i].blkno=0;
		g_buf[i].flags=0;
	}
	return 0;
}

⌨️ 快捷键说明

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