2 * Hyper Operating System Application Framework
7 * Copyright (C) 2006-2007 by Project HOS
8 * http://sourceforge.jp/projects/hos/
12 #ifndef __HOS__file_h__
13 #define __HOS__file_h__
17 #include "system/handle/handleobj.h"
20 #define FILE_MAX_PATH 128 /* パス名の最大値 */
21 #define FILE_MAX_NAME 12 /* 名前の最大値 */
26 #define FILE_ERR_NG (-1)
32 #define FILE_OPEN_READ 0x01 /* 読込み許可 */
33 #define FILE_OPEN_WRITE 0x02 /* 書込み許可 */
34 #define FILE_OPEN_CREATE 0x04 /* 常に新規作成 */
35 #define FILE_OPEN_EXIST 0x08 /* 存在しなければエラー */
36 #define FILE_OPEN_SHARE_READ 0x10 /* 読込み共有許可 */
37 #define FILE_OPEN_SHARE_WRITE 0x20 /* 書込み共有許可 */
38 #define FILE_OPEN_TEXT 0x40 /* テキストモード */
39 #define FILE_OPEN_DIR 0x80 /* ディレクトリをオープン */
42 #define FILE_SEEK_SET 0
43 #define FILE_SEEK_CUR 1
44 #define FILE_SEEK_END 2
47 #define FILE_WMODE_BLOCKING 0x00 /* 書込み ブロッキングモード */
48 #define FILE_WMODE_POLING 0x01 /* 書込み ポーリングモード */
49 #define FILE_RMODE_BLOCKING 0x00 /* 読込み ブロッキングモード */
50 #define FILE_RMODE_POLING 0x01 /* 読込み ポーリングモード */
53 /* IoControl機能コード(共通) */
54 #define FILE_IOCTL_GETDEVINF 0x0000 /* デバイス情報を得る */
55 #define FILE_IOCTL_SYNC 0x0001 /* 同期する */
56 #define FILE_IOCTL_GETSIZE 0x0010 /* ファイルサイズを取得 */
57 #define FILE_IOCTL_GETREADSIZE 0x0010 /* 読み込み可能サイズ(受信バッファ内のデータ量)を取得 */
58 #define FILE_IOCTL_GETWRITESIZE 0x0011 /* 書き込み可能サイズ(送信バッファ内の空きサイズ)を取得 */
59 #define FILE_IOCTL_GETREADBUF 0x0020 /* リードバッファ取得(省コピー版Read) */
60 #define FILE_IOCTL_RELREADBUF 0x0021 /* リードバッファ返却(省コピー版Read) */
61 #define FILE_IOCTL_GETWRITEBUF 0x0030 /* ライトバッファ取得(省コピー版Write) */
62 #define FILE_IOCTL_SENDWRITEBUF 0x0031 /* ライトバッファ送信(省コピー版Write) */
63 #define FILE_IOCTL_CANWRITEBUF 0x0032 /* ライトバッファ破棄(省コピー版Write) */
66 /* IoControl機能コード(ディレクトリ) */
67 #define FILE_IOCTL_DIR_READ 0x0101 /* デバイス情報を得る */
69 /* IoControl機能コード(コンソール) */
70 #define FILE_IOCTL_CON_GETCH 0x0201 /* 文字読込み */
72 /* IoControl機能コード(シリアル通信) */
73 #define FILE_IOCTL_COM_GETSPEED 0x2101 /* BPS取得 */
74 #define FILE_IOCTL_COM_SETSPEED 0x2101 /* BPS設定 */
76 /* IoControl機能コード(Ether) */
77 #define FILE_IOCTL_ETHER_GETPHA 0x2201 /* 物理アドレス取得 */
78 #define FILE_IOCTL_ETHER_SETPHA 0x2202 /* 物理アドレス設定 */
80 /* IoControl機能コード(IP層) */
81 #define FILE_IOCTL_IP_GETIP 0x2301 /* IPアドレス取得 */
82 #define FILE_IOCTL_IP_SETIP 0x2302 /* IPアドレス設定 */
83 #define FILE_IOCTL_IP_GETMASK 0x2303 /* IPサブネットマスク取得 */
84 #define FILE_IOCTL_IP_SETMASK 0x2304 /* IPサブネットマスク設定 */
86 /* IoControl機能コード(ユーザー定義) */
87 #define FILE_IOCTL_USER 0x6000 /* 0x6000〜0x7fff */
91 #define FILE_ATTR_READONLY 0x01
92 #define FILE_ATTR_DIR 0x08
93 #define FILE_ATTR_DEVICE 0x80
98 typedef char FILE_ATTR; /* ファイル属性 */
99 typedef int FILE_ERR; /* ファイルのエラー型 */
100 typedef long FILE_POS; /* ファイル位置の型定義 */
101 typedef long FILE_SIZE; /* 読み書き時のサイズ用の型定義 */
102 typedef unsigned long FILE_TIME; /* 読み書き時のサイズ用の時刻型定義 */
110 typedef struct t_file_fileinf
112 char szFileName[FILE_MAX_NAME];
117 FILE_TIME timeCreate;
118 FILE_TIME timeAceess;
133 void File_Initialize(void); /* ファイルシステムの初期化 */
135 FILE_ERR File_AddDevice(const char *pszName, struct c_drvobj *pDrvObj); /* デバイスドライバの登録 */
136 FILE_ERR File_RemoveDevice(const char *pszName); /* デバイスドライバの削除 */
138 FILE_ERR File_AddVolume(const char *pszName, struct c_volobj *pVolObj); /* ボリュームのマウント */
139 FILE_ERR File_RemoveVolume(const char *pszName); /* ボリュームのアンマウント */
143 HANDLE File_Open(const char *pszPatah, int iMode);
144 void File_Close(HANDLE hFile);
145 FILE_ERR File_IoControl(HANDLE hFile, int iFunc, void *pInBuf, FILE_SIZE InSize, const void *pOutBuf, FILE_SIZE OutSize);
146 FILE_POS File_Seek(HANDLE hFile, FILE_POS Offset, int iOrign);
147 FILE_SIZE File_Read(HANDLE hFile, void *pBuf, FILE_SIZE Size);
148 FILE_SIZE File_Write(HANDLE hFile, const void *pData, FILE_SIZE Size);
149 FILE_ERR File_Flush(HANDLE hFile);
152 FILE_ERR File_SetWriteMode(HANDLE hFile, int iWriteMode);
153 FILE_ERR File_GetWriteStatus(HANDLE hFile);
154 FILE_ERR File_SetWriteMonitor(HANDLE hFile, HANDLE hEvent);
155 FILE_ERR File_SetReadMode(HANDLE hFile, int iReadMode);
156 FILE_ERR File_GetReadStatus(HANDLE hFile);
157 FILE_ERR File_SetReadMonitor(HANDLE hFile, HANDLE hEvent);
161 int File_GetChar(HANDLE hFile);
162 int File_GetString(HANDLE hFile, char *pszString, int iSize);
163 int File_PutChar(HANDLE hFile, int c);
164 int File_PutString(HANDLE hFile, const char *pszString);
167 int File_PrintFormatV(HANDLE hFile, const char *pszFormat, va_list argptr);
168 int File_PrintFormat(HANDLE hFile, const char *pszFormat, ...);
170 int File_PrintHexNibble(HANDLE hFile, unsigned char c); /* 4bitの16進数を出力 */
172 int File_PrintFormatDecimal(HANDLE hFile, long lNum, int iWidth, int iPadChar); /* 書式付き10進数出力 */
173 int File_PrintFormatVL(HANDLE hFile, const char *pszFormat, va_list argptr); /* 書式付き出力軽量版 */
177 FILE_ERR File_ReadDir(HANDLE hFile, T_FILE_FILEINF *pFileInf);
181 FILE_POS File_GetFileSize(HANDLE hFile);
182 FILE_SIZE File_GetReadSize(HANDLE hFile);
183 FILE_SIZE File_GetWriteSize(HANDLE hFile);
184 FILE_SIZE File_GetReadBuf(HANDLE hFile, void **ppBuf);
185 FILE_SIZE File_RelReadBuf(HANDLE hFile, void *pBuf, long lSize);
186 FILE_SIZE File_GetWriteBuf(HANDLE hFile, void **ppBuf);
187 FILE_SIZE File_SendWriteBuf(HANDLE hFile, void *pBuf, long lSize);
188 FILE_ERR File_CanWriteBuf(HANDLE hFile, void *pBuf);
191 HANDLE File_OpenDir(const char *pszName); /* ディレクトリを開く */
192 FILE_ERR File_ReadDir(HANDLE hDir, T_FILE_FILEINF *pFileInf); /* ディレクトリからファイルを検索 */
193 HANDLE File_MakeDir(const char *pszName); /* サブディレクトリを作成 */
194 HANDLE File_Remove(const char *pszName); /* ファイルを削除 */
202 #endif /* __HOS__file_h__ */