ul_file.h

来自「类似Linux操作系统0.11版文件系统的文件系统设计和Windows下的操作程」· C头文件 代码 · 共 81 行

H
81
字号
/*
 * UNIX Like (UL)文件系统 File 处理模块
 */

#pragma once
#include "UL_FileSys.h"



#define O_ACCMODE 00003		// 文件访问模式屏蔽码。
// 打开文件open()和文件控制fcntl()函数使用的文件访问模式。同时只能使用三者之一。
#define O_RDONLY 00		// 以只读方式打开文件。
#define O_WRONLY 01		// 以只写方式打开文件。
#define O_RDWR 02		// 以读写方式打开文件。
// 下面是文件创建标志,用于open()。可与上面访问模式用'位或'的方式一起使用。
#define O_CREAT 00100 /* not fcntl */	// 如果文件不存在就创建。
#define O_EXCL 00200 /* not fcntl */	// 独占使用文件标志。
#define O_NOCTTY 00400 /* not fcntl */	// 不分配控制终端。
#define O_TRUNC 01000 /* not fcntl */	// 若文件已存在且是写操作,则长度截为0。
#define O_APPEND 02000		// 以添加方式打开,文件指针置为文件尾。
#define O_NONBLOCK 04000 /* not fcntl */	// 非阻塞方式打开和操作文件。
#define O_NDELAY O_NONBLOCK	// 非阻塞方式打开和操作文件。

#define ACC_MODE(x) ( "\004\002\006\377"[(x)&O_ACCMODE])


/* lseek *//* 文件指针重定位 */
// 以下符号常数用于lseek()和fcntl()函数。
#define SEEK_SET 0		// 将文件读写指针设置为偏移值。
#define SEEK_CUR 1		// 将文件读写指针设置为当前值加上偏移值。
#define SEEK_END 2		// 将文件读写指针设置为文件长度加上偏移值。

// 文件结构(用于在文件句柄与i 节点之间建立关系)
struct file
{
	unsigned short f_mode;	// 文件操作模式(RW 位)
	unsigned short f_flags;	// 文件打开和控制的标志
	unsigned short f_count;	// 对应文件句柄(文件描述符)数
	struct m_inode *f_inode;	// 指向对应i 节点
	long f_pos;			// 文件位置(读写偏移值)
};

// 文件控制块
struct FILE_INFO
{
	unsigned short fi_mode;		// 文件类型和属性(rwx 位)
	unsigned short fi_uid;		// 用户id(文件拥有者标识符)
	unsigned long fi_size;		// 文件大小(字节数)
	unsigned long fi_mtime;		// 修改时间(自1970.1.1:0 算起,秒)
	unsigned char fi_gid;		// 组id(文件拥有者所在的组)
	unsigned char fi_nlinks;	// 文件目录项链接数
	unsigned short fi_zone[9];	// 直接(0-6),间接(7)或双重间接(8)逻辑块号

	struct task_struct *fi_wait;// 等待该i 节点的进程
	unsigned long fi_atime;		// 最后访问时间
	unsigned long fi_ctime;		// i 节点自身修改时间
	unsigned short fi_dev;		// i 节点所在的设备号
	unsigned short fi_num;		// i 节点号
	unsigned short fi_count;	// i 节点被使用的次数,0 表示该i 节点空闲
	unsigned char fi_lock;		// 锁定标志
	unsigned char fi_dirt;		// 已修改(脏)标志
	unsigned char fi_pipe;		// 管道标志
	unsigned char fi_mount;		// 安装标志
	unsigned char fi_seek;		// 搜寻标志(lseek 时)
	unsigned char fi_update;	// 更新标志
};


extern struct file file_table[NR_FILE];	// 文件表数组(64 项)
extern int UL_creat (const char *pathname, int mode);
extern int UL_delete (const char *name);
extern int UL_open (const char *filename, int flag, int mode);
extern int UL_close (int fd);
extern int UL_write (int fd, char *buf, int count);
extern int UL_read (int fd, char *buf, int count);
extern int UL_lseek (int fd, long offset, int origin);
extern unsigned long UL_getfilesize(int fd);


// 获得文件属性
extern int UL_getfileattr(int fd, FILE_INFO* FI);

⌨️ 快捷键说明

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