📄 buf.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 + -