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

📄 fileio.h

📁 T-kernel 的extension源代码
💻 H
字号:
/* *---------------------------------------------------------------------- *    T-Kernel / Standard Extension * *    Copyright (C) 2006 by Ken Sakamura. All rights reserved. *    T-Kernel / Standard Extension is distributed  *      under the T-License for T-Kernel / Standard Extension. *---------------------------------------------------------------------- * *    Version:   1.00.00 *    Released by T-Engine Forum(http://www.t-engine.org) at 2006/8/11. * *---------------------------------------------------------------------- *//* *	@(#)fileio.h (seio) * *	Standard input-output *	File input-output relation */#include <extension/file.h>#include <extension/sys/segment.h>#include <device/disk.h>#include <seio/fcntl.h>#include <stdio.h>#include <seio/unistd.h>#include <seio/sys/dirent.h>#include <seio/sys/types.h>#include <seio/sys/stat.h>typedef struct FileSystem	FS;typedef struct FileDescriptor	FD;typedef struct FileDescPacket	FDPkt;typedef struct FileIndexNode	INODE;/* * Connection queue of file reference node */#define QUEMSK		0x0007#define NQUE		((QUEMSK) + 1)/* --------------------------------------------------------------------------- *//* * Current directory information */typedef struct {	FS	*fs;		/* File system	*/	INODE	*inode;		/* Directory		*/} CDINF;/* * Path name analysis parameter */typedef struct {	FS	*fs;		/* File system	*/	char	*path;		/* Of the path name top location */	INODE	*inode;		/* File information		*/	UB	flag;		/* Analysis result flag	*/} LPINF;/* Analysis result flag */#define LOOKUP_ROOT	0x01U	/* Re-analysis ( Root directory )	*/#define LOOKUP_LINK	0x02U	/* Re-analysis ( Simbolic link )	*/#define LOOKUP_DONE	0x04U	/* The analysis end	*//* --------------------------------------------------------------------------- *//* * File system connection information */struct FileSystem {	QUEUE		q;			/* For queue connection		*/	W		devnum;			/* Device number		*/	TC		devnm[L_DEVNM];		/* Device name		*/	char		connm[L_FCONNM];	/* Connection name		*/	int		mode;			/* Connection mode		*/	ino_t		rootino;		/* Root file number	*/	QUEUE		iqtbl[NQUE];		/* INODE Connection queue	*/	FastLock	lock;			/* Lock for exclusive control		*/	ID		tskid;			/* File system task	*/	ID		porid;			/* Rendezvous port for command communication	*/	DiskInfo	diskinfo;		/* Disk information			*/	ID		diskid;			/* Disk ID			*/	ER		diskerr;		/* Common part disk I/O error	*/	BOOL		rdonly;			/* True True when connecting reading only	*/	/* Access function */	ER	(*u_detach)	( FS*, int eject );	WER	(*u_open)	( FDPkt *fdp, const char *fname, int oflag, mode_t mode );	ER 	(*u_close)	( FDPkt *fdp );	WER	(*u_lseek)	( FDPkt *fdp, off_t offset, int whence );	WER	(*u_read)	( FDPkt *fdp, void *buf, size_t nbyte );	WER	(*u_write)	( FDPkt *fdp, const void *buf, size_t nbyte );	WER	(*u_getdents)	( FDPkt *fdp, struct dirent *buf, size_t nbyte );	ER	(*u_fsync)	( FDPkt *fdp );	ER	(*u_rename)	( FS*, INODE*, INODE*, const char *fname );	ER	(*u_unlink)	( FS*, INODE* );	ER	(*u_chmod)	( FS*, INODE*, mode_t mode );	ER	(*u_fchmod)	( FDPkt *fdp, mode_t mode );	ER	(*u_mkdir)	( FS*, INODE*, const char *fname, mode_t mode );	ER	(*u_rmdir)	( FS*, INODE* );	ER	(*u_utimes)	( FS*, INODE*, const struct timeval times[2] );	ER	(*u_truncate)	( FS*, INODE*, off_t length );	ER	(*u_ftruncate)	( FDPkt *fdp, off_t length );	ER	(*u_stat)	( FS*, INODE*, struct stat *sb );	ER	(*u_lstat)	( FS*, INODE*, struct stat *sb );	ER	(*u_fstat)	( FDPkt *fdp, struct stat *sb );	ER	(*u_getfsstat)	( FS*, struct statfs *buf, int flags );	ER	(*u_lookup)	( FS*, CDINF *curdir, LPINF *lp);} ;/* * File reference node */struct FileIndexNode {	QUEUE		q;		/* For queue connection		*/	ino_t		ino;		/* File number		*/	UB		type;		/* File type	*/	W		refcnt;		/* Reference count		*/	W		wrefcnt;	/* Writing reference count	*/	ER		diskerr;	/* DiskI/O error	*/	VP		exinf;} ;/* * File discriptor packet */struct FileDescPacket {	W	fdno;		/* File descriptor number	*/	FD	*fd;		/* File descriptor	*/} ;/* * File descriptor */struct FileDescriptor {	FS	*fs;		/* File system connection information	*/	INODE	*inode;		/* File reference node		*/	UW	fpos;		/* Location of file pointer	*/	UB	omode;		/* Open mode		*/	W	refcnt;		/* The number of references from process		*/};/* --------------------------------------------------------------------------- *//* * Standard file system */typedef struct STDFS_FileSystem {	UB		dummy;} SFFS;/* * File reference node */typedef struct STDFS_FileIndexNode {	INODE		c;		/* File reference node common part	*/	UW		nlnk;		/* Number of array links		*/	LINK		link;		/* File link copy	*/} SFNODE;/* * File descriptor */typedef struct STDFS_FileDescriptor {	FD		c;		/* File descriptor common part	*/	W		sffd;		/* File descriptor number	*/	BOOL		currec;		/* Data record decision flag	*/	/* Directory information */	B		*nmbuf;		/* An order of appearance count buffer	*/	W		bufsz;		/* Buffer size		*/	TC		*bufend;	/* Buffer termination			*/} SFFD;/* --------------------------------------------------------------------------- *//* * ROOT File system connection information */typedef struct ROOT_FileSystem {	UB		dummy;} RTFS;/* * ROOT File descriptor */typedef struct ROOT_FileDescriptor {	FD		c;		/* File descriptor common part	*/} RTFD;/* * STDIO File system connection information */typedef struct STDIO_FileSystem {	UB		dummy;} STDIOFS;/* * STDIO File descriptor */typedef struct STDIO_FileDescriptor {	FD		c;		/* File descriptor common part	*/	UB		fileno;		/* Standard input-output number		*/	W		port;		/* Console I/O port	*/} STDIOFD;

⌨️ 快捷键说明

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