-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathFile.h
More file actions
108 lines (92 loc) · 2.13 KB
/
File.h
File metadata and controls
108 lines (92 loc) · 2.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
//
// Created by roy on 27/03/2023.
//
#ifndef OSFILE_FILE_H
#define OSFILE_FILE_H
#include "INode.h"
/*
* 打开文件控制块File类。
* 该结构记录了进程打开文件
* 的读、写请求类型,文件读写位置等等。
*/
class File
{
public:
/* Enumerate */
enum FileFlags
{
FREAD = 0x1, /* 读请求类型 */
FWRITE = 0x2, /* 写请求类型 */
FPIPE = 0x4 /* 管道类型 */
};
/* Functions */
public:
/* Constructors */
File();
/* Destructors */
~File();
void Reset();
/* Member */
unsigned int f_flag; /* 对打开文件的读、写操作要求 */
int f_count; /* 当前引用该文件控制块的进程数量 */
INode* f_inode; /* 指向打开文件的内存Inode指针 */
int f_offset; /* 文件读写位置指针 */
};
/*
* 进程打开文件描述符表(OpenFiles)的定义
* 进程的u结构中包含OpenFiles类的一个对象,
* 维护了当前进程的所有打开文件。
*/
class OpenFiles
{
/* static members */
public:
static const int NOFILES = 15; /* 进程允许打开的最大文件数 */
/* Functions */
public:
/* Constructors */
OpenFiles();
/* Destructors */
~OpenFiles();
/*
* @comment 进程请求打开文件时,在打开文件描述符表中分配一个空闲表项
*/
int AllocFreeSlot();
/*
* @comment Dup系统调用时复制打开文件描述符表中的描述符
*/
int Clone(int fd);
/*
* @comment 根据用户系统调用提供的文件描述符参数fd,
* 找到对应的打开文件控制块File结构
*/
File* GetF(int fd);
/*
* @comment 为已分配到的空闲描述符fd和已分配的打开文件表中
* 空闲File对象建立勾连关系
*/
void SetF(int fd, File* pFile);
/* Members */
private:
File *ProcessOpenFileTable[NOFILES]; /* File对象的指针数组,指向系统打开文件表中的File对象 */
};
/*
* 文件I/O的参数类
* 对文件读、写时需用到的读、写偏移量、
* 字节数以及目标区域首地址参数。
*/
class IOParameter
{
/* Functions */
public:
/* Constructors */
IOParameter();
/* Destructors */
~IOParameter();
/* Members */
public:
unsigned char* m_Base; /* 当前读、写用户目标区域的首地址 */
int m_Offset; /* 当前读、写文件的字节偏移量 */
int m_Count; /* 当前还剩余的读、写字节数量 */
};
#endif //OSFILE_FILE_H