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__