⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xsfstree.h

📁 一个操作系统,用C语言实现开发的,我在一个浙江大学的操作系统实验网站找到.大家学习以下
💻 H
字号:
// XSFS B-Tree System

#ifndef __XSFSTREE_H
#define __XSFSTREE_H

#include "xsfs.h"
#include "xsfsbase.h"

#ifdef _MSC_VER
#pragma pack(push, 1)
#endif

#define MAX_XSFSNAME	64
typedef struct _XSFSNODE
{
	_u32 flags;
	char name[MAX_XSFSNAME];
	_u32 attributes;
	_u32 create_time;
	_u32 modify_time;
	_u32 access_time;
	_u64 length;
	_u32 data_entry;
	_u32 child_unit;
} XSFSNODE;
// Node flags
#define NF_TYPEMASK	0x0000000f
#define NF_LONGNAME	0x00010000

#define NF_TYPE_FILE	0
#define NF_TYPE_DIR		1
#define NF_TYPE_HARDLN	2
#define NF_TYPE_SYMLN	3
#define NF_TYPE_LABEL	4

typedef struct _XSFSBNODE
{
	_u32 b_left;
	XSFSNODE node;
	_u32 b_right;
} XSFSBNODE;

typedef struct _XSFSBHEAD
{
	_u32 n_max;
	_u32 n_total;
	_u32 uplevel_unit;
	_u32 uplevel_index;
	_u32 parent_unit;
	_u32 parent_index;
} XSFSBHEAD;

// FS Summary
#define MAX_BLOCKSIZE	512
#define DEF_BLOCKSIZE	80
typedef struct _XSFSROOT
{
	_u32 block_size;	// block size in stream SSI_FSTREE
	_u32 n_blocks;		// total blocks
	_u32 n_streams;		// number of streams in FSTBLOCKDEF
	_u32 start_pos;		// offset of first block in bytes
	_u32 free_start;	// first free block index (1-based)
	XSFSNODE root;
} XSFSROOT;

typedef struct _FSTBLOCK	// head of each block
{
	_u32 flags;
	_u32 next;
} FSTBLOCK;
// Block flags
#define BF_DELETED		0x80000000
#define BF_FIRST		0x00000001
#define BF_FINAL		0x00000002

typedef struct _FSTBLOCKDEF
{
	_u32 bi_name, bo_name, l_name;	// long filename
	_u32 reference;					// for hard links
	// ... following are (bi_stream, bo_stream)
} FSTBLOCKDEF;

// File stream indices
#define FSI_DEFAULT		0
#define FSI_SYSTEM		1

#ifdef _MSC_VER
#pragma pack(pop)
#endif

#ifdef __cplusplus
extern "C" {
#endif

_u32 xsfsFindNode(HXSFS, _u32 root_unit, const char *name, XSFSNODE *result, int *index);
_u32 xsfsLocateNode(HXSFS, XSFSNODE *parent, const char *name, XSFSNODE *result, int *index);
int xsfsAddNode(HXSFS, XSFSNODE *parent, XSFSNODE *newnode, _u32 up_unit, int up_index);
int xsfsDelNodePos(HXSFS xsfs, XSFSNODE *parent, _u32 unit, int index);
int xsfsDelNode(HXSFS xsfs, XSFSNODE *parent, const char *name);
_u32 xsfsAllocDataEntry(HXSSTREAM, XSFSROOT*);
void xsfsFreeDataEntry(HXSSTREAM, XSFSROOT*, _u32);
int xsfsLoadDataStream(HXSSTREAM, XSFSROOT*, _u32, _u32, XSSTREAM*);
int xsfsSaveDataStream(HXSSTREAM, XSFSROOT*, _u32, _u32, XSSTREAM*);
int xsfsLoadRoot(HXSFS, XSSTREAM*, XSFSROOT*);
int xsfsSaveRoot(HXSFS, XSFSROOT*);

#ifdef __cplusplus
}
#endif

static inline int i_xsfs_node_num(HXSFS xsfs)
{ return (i_xsfs_unit_size(xsfs)-sizeof(XSFSBHEAD)-sizeof(_u32))/(sizeof(_u32)+sizeof(XSFSNODE)); }

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -