XINU
lflseek.c
Go to the documentation of this file.
1 /* lflseek.c - lflseek */
2 
3 #include <xinu.h>
4 
5 /*------------------------------------------------------------------------
6  * lflseek - Seek to a specified position in a file
7  *------------------------------------------------------------------------
8  */
10  struct dentry *devptr, /* Entry in device switch table */
11  uint32 offset /* Byte position in the file */
12  )
13 {
14  struct lflcblk *lfptr; /* Ptr to open file table entry */
15 
16  /* If file is not open, return an error */
17 
18  lfptr = &lfltab[devptr->dvminor];
19  wait(lfptr->lfmutex);
20  if (lfptr->lfstate != LF_USED) {
21  signal(lfptr->lfmutex);
22  return SYSERR;
23  }
24 
25  /* Verify offset is within current file size */
26 
27  if (offset > lfptr->lfdirptr->ld_size) {
28  signal(lfptr->lfmutex);
29  return SYSERR;
30  }
31 
32  /* Record new offset and invalidate byte pointer (i.e., force */
33  /* the index and data blocks to be replaced if a successive */
34  /* call is made to read or write) */
35 
36  lfptr->lfpos = offset;
37  lfptr->lfbyte = &lfptr->lfdblock[LF_BLKSIZ];
38 
39  signal(lfptr->lfmutex);
40  return OK;
41 }
char * lfbyte
Definition: lfilesys.h:161
struct ldentry * lfdirptr
Definition: lfilesys.h:147
int32 dvminor
Definition: conf.h:8
全てのシステムヘッダファイルをインクルードする。
#define SYSERR
処理が失敗した場合
Definition: kernel.h:79
#define LF_USED
Definition: lfilesys.h:53
struct lflcblk lfltab[]
Definition: lflinit.c:5
#define OK
処理が成功した場合
Definition: kernel.h:77
sid32 lfmutex
Definition: lfilesys.h:146
devcall lflseek(struct dentry *devptr, uint32 offset)
Definition: lflseek.c:9
Definition: conf.h:6
#define LF_BLKSIZ
Definition: lfilesys.h:48
byte lfstate
Definition: lfilesys.h:144
uint32 ld_size
Definition: lfilesys.h:98
syscall wait(sid32)
Definition: wait.c:9
syscall signal(sid32)
セマフォにシグナルを送り、待機プロセスがある場合は解除する。
Definition: signal.c:18
uint32 lfpos
Definition: lfilesys.h:150
unsigned int uint32
符号なし32ビット整数(unsigned int)
Definition: kernel.h:15
char lfdblock[LF_BLKSIZ]
Definition: lfilesys.h:159
int32 devcall
デバイスコール関数 返り値の型
Definition: kernel.h:49