מוגדרת טבלת
התקנים. לכל התקן יש מציין שהוא האינדקס
שלו בטבלת ההתקנים. בכל כניסה בטבלה ש מצביעים
לאופרטורים הספציפיים לאותו התקן וכן נתונים נוספים הדרושים להתקן. לכל אופרטור מופשט מועבר מציין ההתקן
כפרמטר. האופרטור המופשט משתמש בפרמטר
זה על מנת לגשת אל הכניסה המתאימה בטבלת ההתקנים.
/*------------------------------------------------------------------------
* Format of each entry is:
*
* device number, device name,
* init, open, close,
* read, write, seek,
* getc, putc, cntl,
* port addr, device input vector, device output vector,
* input interrupt routine, output interrupt routine,
* device i/o block, minor device number
*------------------------------------------------------------------------
*/
/* Device table declarations */
struct devsw { /* device table entry */
int dvnum;
char dvnam[8];
int (*dvinit)();
int (*dvopen)();
int (*dvclose)();
int (*dvread)();
int (*dvwrite)();
int (*dvseek)();
int (*dvgetc)();
int (*dvputc)();
int (*dvcntl)();
int dvport;
int dvivec;
int dvovec;
int (*dviint)();
int (*dvoint)();
char *dvioblk;
int dvminor;
};
read(descrp, buff, count)
int descrp, count;
char *buff;
{
struct devsw *devptr;
if (isbaddev(descrp) )
return(SYSERR);
devptr = &devtab[descrp];
return( (*devptr->dvread)(devptr,buff,count)
);
}
תודה
הסברתם את זה, כמו שאר הנושאים, באופן הכי ברור שיש.