📄 fileio.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 + -