www.pudn.com > OS.rar > vfs.h, change:2006-10-09,size:9667b
#ifndef __POSIX_INTERFACE_h__
#define __POSIX_INTERFACE_h__
#define LFN_API
#define WITHFAT32
#include "Typedef.h"
/**************************************************************************/
/* M A C R O S */
/***************************************************************************/
#define FAT16_Type 0x01
#define FAT32_Type 0x02
#define FORCE_FAT32_Type 0x12
#define FORCE_FAT16_Type 0x11
/*----------------- seek flags ------------------*/
#define SEEK_SET 0 /* offset from beginning of the file*/
#define SEEK_CUR 1 /* offset from current location */
#define SEEK_END 2 /* offset from eof */
/***************** open flags (the 2nd parameter)**********************/ //wanghuidi
//Marked by lanzhu
//#define O_OPEN 0x0000
#define O_RDONLY 0x0000
#define O_WRONLY 0x0001
#define O_RDWR 0x0002
#define O_TRUNC 0x0200 /* both */
#define O_CREAT 0x0400
#define O_EXCL 0x4000 /* not fcntl */
/*----------------- open flags (the 3rd parameter) --------------------*/
#define _S_IREAD 0x0400 /* Read by owner. */
#define _S_IWRITE 0x0200 /* Write by owner. */
/*------------------ error codes ------------------*/
/* these code should be defined in erron.h in ussally Clib */
#define ENOENT 2 /* No such file or directory */
#define EIO 5 /* I/O error */
#define EBADF 9 /* Bad file number */
#define ENOMEM 12 /* Not enough core */
#define EACCES 13 /* Permission denied */
#define EBUSY 16 /* Device or resource busy */
#define EEXIST 17 /* File exists */
#define ENOTDIR 20
#define EISDIR 21
#define EINVAL 22 /* Invalid argument */
#define EMFILE 24 /* Too many open files */
#define ENOSPC 28 /* No space left on device */
#define ENOTEMPTY 29 /* directory is not empty; or directory is either current working directory or root directory.*/
#define ERANGE 34 /* Math result not representable */
#define EROFS 30 /* Read-only file system */
#define ENAMETOOLONG 78
/*-----------------------------------------------------*/
/* File attribute constants for _findfirst() */
#define _A_NORMAL 0x00 /* Normal file - No read/write restrictions */
#define _A_RDONLY 0x01 /* Read only file */
#define _A_HIDDEN 0x02 /* Hidden file */
#define _A_SYSTEM 0x04 /* System file */
#define _A_SUBDIR 0x10 /* Subdirectory */
#define _A_ARCH 0x20 /* Archive file */
/*-----------------------------------------------------*/
/* FAT file system attribute bits */
#define D_NORMAL 0 /* normal */
#define D_RDONLY 0x01 /* read-only file */
#define D_HIDDEN 0x02 /* hidden */
#define D_SYSTEM 0x04 /* system */
#define D_VOLID 0x08 /* volume id */
#define D_DIR 0x10 /* subdir */
#define D_ARCHIVE 0x20 /* archive bit */
/* /// Added D_DEVICE bit. - Ron Cemer */
// lanzhu add @ [1/9/2006]
#define D_FILE (0x40)
//#define D_LFN (D_RDONLY | D_HIDDEN | D_SYSTEM | D_VOLID)
//#define D_ALL (D_RDONLY | D_HIDDEN | D_SYSTEM | D_DIR | D_ARCHIVE)
//050611 zhangzha modified 解决调用findfirst时用D_ALL属性无法找到D_NORMAL属性的文件的问题
#define D_ALL (D_FILE | D_RDONLY | D_HIDDEN | D_SYSTEM | D_DIR | D_ARCHIVE)
//2006/05/23 zhangzha add
#define UNI_GBK 0
#define UNI_BIG5 1
#define UNI_SJIS 2
#define UNI_ENGLISH 3
#define UNI_ARABIC 4
#define UNI_INVALID_TAB 0xffff
/**************************************************************************/
/* DATA TYPES ABOUT FILE */
/***************************************************************************/
// data structures for POSIX standard utime()
typedef unsigned long time_t;
//----------------------------------
struct stat
{
unsigned short st_mode;
// _dev_t st_dev;
// _dev_t st_rdev;
// short st_nlink;
long st_size;
// long st_atime;
unsigned long st_mtime;
// time_t st_ctime;
};
//----------------------------------
struct _diskfree_t {
unsigned long total_clusters;
unsigned long avail_clusters;
unsigned long sectors_per_cluster;
unsigned long bytes_per_sector;
};
//20050224
struct deviceinfo {
char device_name[16]; // device name
char device_enable; // device enable status
char device_typeFAT; // device FAT type
unsigned long device_availspace; // device available space
unsigned long device_capacity; // device capacity
};
//20050224,from yongliang
struct utimbuf {
time_t actime;
time_t modtime;
};
//by yongliang
// data structure for _setftime()
struct timesbuf {
unsigned int modtime;
unsigned int moddate;
unsigned int accdate;
};
// data structure for _getfstat(), 555FS
struct statbuf {
unsigned long st_size;
unsigned char st_mode;
unsigned int crtime;
unsigned int crdate;
unsigned int modtime;
unsigned int moddate;
unsigned int accdate;
};
struct f_info
{
unsigned char f_attrib;
unsigned int f_time;
unsigned int f_date;
unsigned long f_size;
unsigned int entry; //2006.7.12
#ifdef LFN_API
char f_name[256]; //change to 256 form 255
#else
char f_name[13];
#endif
};
/***************************************************************************/
/* F U N C T I O N D E C L A R A T I O N S */
/***************************************************************************/
//安全退出时,进行文件句柄的检查,关闭所有没有注册的处于打开状态的文件句柄
extern void fs_safexit(void); // lanzhu add @ [1/3/2006]
//注册文件句柄,安全退出如果此文件仍处于打开状态降不会被close
extern void fs_registerfd(int fd); // lanzhu add @ [1/3/2006]
extern int close(int fd);
extern int open(LPSTR path, int open_flag);
extern int read(int fd, LPDATA buf,unsigned int size);
extern int write(int fd, LPDATA buf, unsigned int size);
extern long lseek(int fd,long offset,int fromwhere);
extern long tell(int fd); //wanghuidi,2004.11.23
extern int unlink(LPSTR filename);
//extern int rename(LPSTR oldname , LPSTR newname);
extern int readB(int fd, LPDATA buf,unsigned int size);
extern int writeB(int fd, LPDATA buf, unsigned int size);
extern int mkdir(LPSTR pathname);
extern int rmdir(LPSTR pathname);
extern int chdir(LPSTR path);
extern LPSTR getcwd(LPSTR buffer, int maxlen );
extern int fstat(int handle, struct stat *statbuf);
extern int stat(LPSTR, struct stat*);
extern int _findfirst(LPSTR name, struct f_info *f_info, unsigned int attr);
extern int _findnext(struct f_info *f_info);
extern int _getdiskfree(short, struct _diskfree_t *);
#define _changedisk fs_changedisk //wanghuidi,20050217
extern int _changedisk(unsigned char disk); //wanghuidi,20050217
/****************************************************************************/
extern long vfsFreeSpace(short driver);
//extern int dosSimDir();
//extern void unixSimls();
extern int _copy(LPSTR path1, LPSTR path2);
//extern unsigned int osTimeGet(); //// not use in cmdtbl_unit.c,WangHuidi 2004-08-02
//extern unsigned char fs_format (UBYTE Drv, UBYTE FAT_Type, UWORD ResvSecNum);
extern void fs_init(void);
extern int fs_uninit();
extern unsigned short telldir(void);
extern void seekdir(unsigned short pos); //the parameter "pos" must be the return value of "telldir"
extern void rewinddir(void);
/****************************************************************************/
extern int _getfstat (char *, struct statbuf *);
/****************************************************************************/
//设置文件属性
int _setfattr (LPSTR filename, unsigned short attr);
extern int _devicemount(short disked);
extern int _deviceunmount(short disked);
//get error code
int _getfserrcode ();
//clear error code
void _clsfserrcode ();
int _format (unsigned char drv, unsigned char fstype);
int _deleteall (LPSTR filename);
long _GetCluster(int fd);
long Clus2Phy(unsigned short dsk, unsigned long cl_no);
//删除文件的部分内容,必须是cluster的整数倍
//int DeletePartFile(int fd, unsigned long offset, unsigned long length);
//向一个文件插入另一个文件
//int InserPartFile(int tagfd, int srcfd, unsigned long tagoff, unsigned long srclen);
unsigned int GetSectorsPerCluster(unsigned int dsk);
/****************************************************************************/
//select unicode page, code page is UNI_GBK,UNI_BIG5,UNI_SJIS,UNI_ENGLISH
//return 0, success. return -1, no this code page
int ChangeCodePage(unsigned int wCodePage);
//judge fat type
//success,return FAT16_Type,FAT32_Type
//fail, return -1
int checkfattype(int disk);
//updata dir information but not close the dir
//int UpdataDir(int fd);
//支持小容量的磁盘的格式化,固定格式化为FAT16,不带MBR,需要指定磁盘的最大sector数和实际sector数
//因为我们的文件系统不支持FAT12,而当磁盘容量小于16MB时,PC会把磁盘认做FAT12,所以做了这个函数,可以
//把小于16MB的磁盘格式化为大于16Mb(可指定大小),并可以指定磁盘实际的空间大小
//int sformat(int drv, unsigned long totalsectors, unsigned long realsectors);
//查询打开的文件在哪个磁盘,返回值0,1,2...
int GetDiskOfFile(int fd);
#endif //# end __FS_INTERFACE_h__