XINU
open.c
Go to the documentation of this file.
1 /* open.c - open */
2 
3 #include <xinu.h>
4 
5 /*------------------------------------------------------------------------
6  * open - Open a device (some devices ignore name and mode parameters)
7  *------------------------------------------------------------------------
8  */
10  did32 descrp, /* Descriptor for device */
11  char *name, /* Name to use, if any */
12  char *mode /* Mode for device, if any */
13  )
14 {
15  intmask mask; /* Saved interrupt mask */
16  struct dentry *devptr; /* Entry in device switch table */
17  int32 retval; /* Value to return to caller */
18 
19  mask = disable();
20  if (isbaddev(descrp)) {
21  restore(mask);
22  return SYSERR;
23  }
24  devptr = (struct dentry *) &devtab[descrp];
25  retval = (*devptr->dvopen) (devptr, name, mode);
26  restore(mask);
27  return retval;
28 }
void restore(intmask)
全てのシステムヘッダファイルをインクルードする。
#define SYSERR
処理が失敗した場合
Definition: kernel.h:79
Definition: conf.h:6
struct dentry devtab[]
Definition: conf.c:11
syscall open(did32 descrp, char *name, char *mode)
Definition: open.c:9
devcall(* dvopen)(struct dentry *, char *, char *)
Definition: conf.h:11
uint32 intmask
保存された割り込みマスク
Definition: kernel.h:38
int int32
符号あり32ビット整数(int)
Definition: kernel.h:11
#define isbaddev(f)
デバイスIDを検証するマクロ。
Definition: device.h:15
int32 did32
デバイスID
Definition: kernel.h:28
int32 syscall
システムコール関数 返り値の型
Definition: kernel.h:47
intmask disable(void)
割り込み禁止(intr.Sに定義がある)