devbuf.c
来自「用于motorala 68K系列处理器的小实时多任务操作系统 The OMU 」· C语言 代码 · 共 83 行
C
83 行
/******************************************************************************* * Devbuf.c Device track buffering system ******************************************************************************* */# include "../../include/buf.h"# include "devbuf.h"struct Dbuf devbuf[NODEVBUFS];struct Dbuf *dbfirst;initdevbuf(){ dbfirst = devbuf;}struct Dbuf *checkdevbuf(buf)struct buf *buf;{ struct Dbuf *dbuf; dbuf = dbfirst; do{ if(INBUF(dbuf, buf)) return dbuf; } while(dbuf = dbuf->next); return 0;}fromdevbuf(buf)struct buf *buf;{ struct Dbuf *dbuf; dbuf = dbfirst; do{ if(INBUF(dbuf, buf)){ bytecp(&dbuf->data[SECTSIZE * (buf->b_bno - dbuf->bstart)], buf->b_buf, SECTSIZE); if(dbuf != dbfirst){ if(dbuf->prev) dbuf->prev->next = dbuf->next; if(dbuf->next) dbuf->next->prev = dbuf->prev; dbuf->next = dbfirst; dbfirst = dbuf; } return 0; } } while(dbuf = dbuf->next); return -1;}struct Dbuf *getdevbuf(){ struct Dbuf *dbuf, *dbufl; int bno; /* Gets last block */ dbufl = dbfirst; while(dbufl->next) dbufl = dbufl->next; /* See if free block exists */ dbuf = devbuf; for(bno = 0; bno < NODEVBUFS; bno++){ if(!dbuf->flags){ /* Checks if dbuf is first one if not link it in */ if(dbuf != dbfirst){ dbuf->prev = dbufl; dbufl->next = dbuf; dbuf->next = 0; } break; } dbuf++; } /* If no free blocks get last one */ if(bno == NODEVBUFS){ dbuf = dbufl; } dbuf->flags = AVAILABLE; return dbuf;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?