XINU
device
lfs
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
*/
9
devcall
lflseek
(
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
}
lflcblk::lfbyte
char * lfbyte
Definition:
lfilesys.h:161
lflcblk::lfdirptr
struct ldentry * lfdirptr
Definition:
lfilesys.h:147
dentry::dvminor
int32 dvminor
Definition:
conf.h:8
xinu.h
全てのシステムヘッダファイルをインクルードする。
SYSERR
#define SYSERR
処理が失敗した場合
Definition:
kernel.h:79
lflcblk
Definition:
lfilesys.h:142
LF_USED
#define LF_USED
Definition:
lfilesys.h:53
lfltab
struct lflcblk lfltab[]
Definition:
lflinit.c:5
OK
#define OK
処理が成功した場合
Definition:
kernel.h:77
lflcblk::lfmutex
sid32 lfmutex
Definition:
lfilesys.h:146
lflseek
devcall lflseek(struct dentry *devptr, uint32 offset)
Definition:
lflseek.c:9
dentry
Definition:
conf.h:6
LF_BLKSIZ
#define LF_BLKSIZ
Definition:
lfilesys.h:48
lflcblk::lfstate
byte lfstate
Definition:
lfilesys.h:144
ldentry::ld_size
uint32 ld_size
Definition:
lfilesys.h:98
wait
syscall wait(sid32)
Definition:
wait.c:9
signal
syscall signal(sid32)
セマフォにシグナルを送り、待機プロセスがある場合は解除する。
Definition:
signal.c:18
lflcblk::lfpos
uint32 lfpos
Definition:
lfilesys.h:150
uint32
unsigned int uint32
符号なし32ビット整数(unsigned int)
Definition:
kernel.h:15
lflcblk::lfdblock
char lfdblock[LF_BLKSIZ]
Definition:
lfilesys.h:159
devcall
int32 devcall
デバイスコール関数 返り値の型
Definition:
kernel.h:49
Generated by
1.8.13