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

📄 fat.h

📁 newos is new operation system
💻 H
字号:
/*** Copyright 2003, Travis Geiselbrecht. All rights reserved.** Distributed under the terms of the NewOS License.*/#ifndef _FAT_H#define _FAT_H#include <kernel/vfs.h>#include "fat_fs.h"/* mount structure */typedef struct fat_fs {	fs_id id;	int fd;	void *dev_vnode;	vnode_id root_vnid;	sem_id sem;	int fat_type; // 12/16/32	uint32 first_data_sector;	uint32 cluster_count;	uint16 root_dir_sectors; // always zero on fat 32	uint32 fat_sector_offset;	uint32 cluster_size;	fat_bpb bpb;	fat_bpb16 bpb16;	fat_bpb32 bpb32;} fat_fs;/* reader/writer lock for fat */#define FAT_WRITE_COUNT 1024#define LOCK_READ(sem) sem_acquire(sem, 1)#define UNLOCK_READ(sem) sem_release(sem, 1)#define LOCK_WRITE(sem) sem_acquire(sem, FAT_WRITE_COUNT)#define UNLOCK_WRITE(sem) sem_release(sem, FAT_WRITE_COUNT)/* vnode structure */typedef struct fat_vnode {	vnode_id id;	bool is_dir;	uint32 size;	uint32 start_cluster; // for fat 12/16 and the root dir, means 'starting sector'} fat_vnode;#define CLUSTERS_TO_VNID(dir_cluster, file_cluster) ((((vnode_id)dir_cluster) << 32) | ((vnode_id)file_cluster))#define VNID_TO_DIR_CLUSTER(vnid) ((uint32)((vnid) >> 32))#define VNID_TO_FILE_CLUSTER(vnid) ((uint32)(vnid))/* fs calls */int fat_mount(fs_cookie *fs, fs_id id, const char *device, void *args, vnode_id *root_vnid);int fat_unmount(fs_cookie fs);int fat_sync(fs_cookie fs);int fat_lookup(fs_cookie fs, fs_vnode dir, const char *name, vnode_id *id);int fat_getvnode(fs_cookie fs, vnode_id id, fs_vnode *v, bool r);int fat_putvnode(fs_cookie fs, fs_vnode v, bool r);int fat_removevnode(fs_cookie fs, fs_vnode v, bool r);int fat_opendir(fs_cookie fs, fs_vnode v, dir_cookie *cookie);int fat_closedir(fs_cookie fs, fs_vnode v, dir_cookie cookie);int fat_rewinddir(fs_cookie fs, fs_vnode v, dir_cookie cookie);int fat_readdir(fs_cookie fs, fs_vnode v, dir_cookie cookie, void *buf, size_t buflen);int fat_open(fs_cookie fs, fs_vnode v, file_cookie *cookie, int oflags);int fat_close(fs_cookie fs, fs_vnode v, file_cookie cookie);int fat_freecookie(fs_cookie fs, fs_vnode v, file_cookie cookie);int fat_fsync(fs_cookie fs, fs_vnode v);ssize_t fat_read(fs_cookie fs, fs_vnode v, file_cookie cookie, void *buf, off_t pos, ssize_t len);ssize_t fat_write(fs_cookie fs, fs_vnode v, file_cookie cookie, const void *buf, off_t pos, ssize_t len);int fat_seek(fs_cookie fs, fs_vnode v, file_cookie cookie, off_t pos, seek_type st);int fat_ioctl(fs_cookie fs, fs_vnode v, file_cookie cookie, int op, void *buf, size_t len);int fat_canpage(fs_cookie fs, fs_vnode v);ssize_t fat_readpage(fs_cookie fs, fs_vnode v, iovecs *vecs, off_t pos);ssize_t fat_writepage(fs_cookie fs, fs_vnode v, iovecs *vecs, off_t pos);int fat_create(fs_cookie fs, fs_vnode dir, const char *name, void *create_args, vnode_id *new_vnid);int fat_unlink(fs_cookie fs, fs_vnode dir, const char *name);int fat_rename(fs_cookie fs, fs_vnode olddir, const char *oldname, fs_vnode newdir, const char *newname);int fat_mkdir(fs_cookie _fs, fs_vnode _base_dir, const char *name);int fat_rmdir(fs_cookie _fs, fs_vnode _base_dir, const char *name);int fat_rstat(fs_cookie fs, fs_vnode v, struct file_stat *stat);int fat_wstat(fs_cookie fs, fs_vnode v, struct file_stat *stat, int stat_mask);#endif

⌨️ 快捷键说明

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