📄 sfmgr.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. * *---------------------------------------------------------------------- *//* * @(#)sfmgr.h (seio) * * Standard input/output */#define DEBUG_MODULE "(seio)"#include <basic.h>#include <tk/tkernel.h>#include <tk/syslib.h>#include <tk/util.h>#include <extension/seio.h>#include <extension/clk.h>#include <errno.h>#include <sys/syscall.h>#include <sys/util.h>#include <sys/queue.h>#include <stdlib.h>#include <libstr.h>#include <tstring.h>#include <sys/util.h>#include <extension/sys/svc/ifseio.h>#include <sys/debug.h>#include <seio/unistd.h>#include <extension/errno.h>#include "tf.h"#include "fileio.h"/* * Error code relation */#define EC_MASK (0xffff0000U)#define ED_MASK (0x0000ffffU)#define toER(class, detail) ((ER)(((UW)(class) << 16) | ((UW)(detail) & 0x0000ffffU)))/* * SEIO error code */#define toERUX(errno) ( (E_SEIO) | ((errno) & 0xffff) )/* * Additional SEIO error code */#define ENOTDIR 20 /* It is not a directory */#define EISDIR 21 /* It is a directory *//* * Special device number "dev" */#define ROOT_DEV 0#define STDIO_DEV 0/* * Special file number "ino" */#define NOEXS_INO 0#define ROOT_INO 1#define SFFS_INO(x) ((x) + 2)#define SROOT_INO SFFS_INO(0)/* * Process attachment information */typedef struct { FD **fdtbl; /* Open file */ CDINF curdir; /* Current directory */ mode_t cmask; /* File creation mode mask */} UXINFO;#define UXINFO_SZ ( sizeof(UXINFO) )/* * Command packet */typedef struct { SyscallCmdPacket cmd; /* Command parameter and others. Common information */ UXINFO *uxinfo; /* Request process attachment information*/ VP exinf; /* System call individual information */} CmdPkt;/* * For path name analysis */#define LOCAL_U_LOOKUP_FN 0#define LOCAL_U_LOOKUP_PARA LPINF/* * Others */#ifdef GHS#define NIL {0, 0, 0} /* Nil/Zero */#else#define NIL {} /* Nil/Zero */#endif/* --------------------------------------------------------------------------- */#define IMPORT_DEFINE 1#if IMPORT_DEFINE/* main.c */IMPORT TF_CTX tf_euctotc_ctx;IMPORT TF_CTX tf_tctoeuc_ctx;IMPORT FastLock UxLock;IMPORT FastLock EtoTLock;IMPORT FastLock TtoELock;IMPORT W MaxOpenF;IMPORT PRI FsTskPri;IMPORT W SyncTimeOut;IMPORT ER main( INT ac, UB *av[] );/* fileio.c */IMPORT QUEUE FSQue;IMPORT void DiskErrorHandler( DiskErrInfo *info );IMPORT ER CheckDiskError( FS *_fs, INODE *inode );IMPORT ER CallFileIO( int fildes, CmdPkt *pkt );IMPORT ER CallFileIO_lookup( const char *path, CmdPkt *pkt );IMPORT ER CallFileIO_path( CmdPkt *pkt );IMPORT ER CallFileIO_fd( int fildes, CmdPkt *pkt );IMPORT ER CallFileIO_attach( CmdPkt *pkt );IMPORT ER CallFileIO_detach( CmdPkt *pkt );/* inode.c */IMPORT void inode_QueInit( FS *fs );IMPORT ER inode_CheckEmpty( FS *fs );IMPORT void inode_Register( FS *fs, INODE *inode, UB omode );IMPORT ER inode_Release( FS *fs, INODE *inode, UB omode, BOOL force );IMPORT void inode_Free( FS *fs, INODE *inode );IMPORT INODE* inode_Search( FS *fs, ino_t ino );IMPORT void inode_ChangeQue( FS *fs, INODE *inode );/* stdio.c */IMPORT STDIOFS STDIO_FS;IMPORT void std_init( UXINFO *uxinfo );IMPORT WER std_open( FDPkt *fdp, int oflag, mode_t mode);IMPORT ER std_close( FDPkt *fdp );IMPORT WER std_lseek( FDPkt *fdp, long offset, int whence );IMPORT WER std_read( FDPkt *fdp, void *buf, size_t nbyte );IMPORT WER std_write( FDPkt *fdp, const void *buf, size_t nbyte );IMPORT ER std_fstat( FDPkt *fdp, struct stat *sb );/* stdfs.c */IMPORT SFFS STD_FS;IMPORT ER sf_attach( const TC *devnm, const char *connm, int mode );IMPORT ER sf_detach( const TC *devnm, int eject );IMPORT WER sf_open( FDPkt *fdp, const char *fname, int oflag, mode_t mode );IMPORT ER sf_close( FDPkt *fdp );IMPORT WER sf_lseek( FDPkt *fdp, long offset, int whence );IMPORT WER sf_read( FDPkt *fdp, void *buf, size_t nbyte );IMPORT WER sf_write( FDPkt *fdp, const void *buf, size_t nbyte );IMPORT WER sf_getdents( FDPkt *fdp, struct dirent *buf, size_t nbyte );IMPORT ER sf_fsync( FDPkt *fdp );IMPORT ER sf_rename( INODE*, INODE*, const char *fname );IMPORT ER sf_unlink( INODE* );IMPORT ER sf_chdir( FS *fs, INODE* );IMPORT ER sf_chmod( INODE*, mode_t mode );IMPORT ER sf_fchmod( FDPkt *fdp, mode_t mode );IMPORT ER sf_mkdir( INODE*, const char *fname, mode_t mode );IMPORT ER sf_rmdir( INODE* );IMPORT ER sf_utimes( INODE*, const struct timeval times[2] );IMPORT ER sf_truncate( INODE*, off_t length );IMPORT ER sf_ftruncate( FDPkt *fdp, off_t length );IMPORT ER sf_stat( INODE*, struct stat *sb );IMPORT ER sf_lstat( INODE*, struct stat *sb );IMPORT ER sf_fstat( FDPkt *fdp, struct stat *sb );IMPORT WER sf_getfsstat( struct statfs *buf, long bufsize, int flags );IMPORT ER sf_getlink( INODE*, char *buf );IMPORT ER sf_lookup( CDINF *curdir, LPINF *lp );/* root.c */IMPORT RTFS ROOT_FS;IMPORT WER rt_open( FDPkt *fdp, int oflag, mode_t mode );IMPORT ER rt_close( FDPkt *fdp );IMPORT WER rt_lseek( FDPkt *fdp, long offset, int whence );IMPORT WER rt_getdents( FDPkt *fdp, struct dirent *buf, size_t nbyte );IMPORT ER rt_fsync( FDPkt *fdp );IMPORT ER rt_stat( struct stat *sb );IMPORT ER rt_lstat( struct stat *sb );IMPORT ER rt_fstat( FDPkt *fdp, struct stat *sb );/* tf_intf.c */IMPORT W __tf_lock_init();IMPORT void __tf_lock_finish();/* fsconnect.c */IMPORT ER call_attach(INT mode, FS *fs);IMPORT ER get_fssize(INT mode);#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -