OSDN Git Service

16978aa9ca5428b0640a54b28912800674aedff4
[hos/hos-v4a.git] / aplfw / system / file / file.h
1 /** 
2  *  Hyper Operating System  Application Framework
3  *
4  * @file  file.h
5  * @brief %jp{ファイルシステム}
6  *
7  * Copyright (C) 2006-2007 by Project HOS
8  * http://sourceforge.jp/projects/hos/
9  */
10
11
12 #ifndef __HOS__file_h__
13 #define __HOS__file_h__
14
15
16 #include <stdarg.h>
17 #include "system/handle/handleobj.h"
18
19
20 #define FILE_MAX_PATH                           128                     /* パス名の最大値 */
21 #define FILE_MAX_NAME                           12                      /* 名前の最大値 */
22
23
24 /* エラーコード定義 */
25 #define FILE_ERR_OK                                     0
26 #define FILE_ERR_NG                                     (-1)
27
28 /* 定数定義 */
29 #define FILE_EOF                                        (-1)
30
31 /* Openモード定義 */
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            /* ディレクトリをオープン */
40
41 /* シーク */
42 #define FILE_SEEK_SET                           0
43 #define FILE_SEEK_CUR                           1
44 #define FILE_SEEK_END                           2
45
46 /* 同期モード */
47 #define FILE_WMODE_BLOCKING                     0x00            /* 書込み ブロッキングモード */
48 #define FILE_WMODE_POLING                       0x01            /* 書込み ポーリングモード */
49 #define FILE_RMODE_BLOCKING                     0x00            /* 読込み ブロッキングモード */
50 #define FILE_RMODE_POLING                       0x01            /* 読込み ポーリングモード */
51
52
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) */
64
65 /* IoControl機能コード(コンソール) */
66 #define FILE_IOCTL_CON_GETCH            0x0101          /* 文字読込み */
67
68 /* IoControl機能コード(シリアル通信) */
69 #define FILE_IOCTL_COM_GETSPEED         0x2101          /* BPS取得 */
70 #define FILE_IOCTL_COM_SETSPEED         0x2101          /* BPS設定 */
71
72 /* IoControl機能コード(Ether) */
73 #define FILE_IOCTL_ETHER_GETPHA         0x2201          /* 物理アドレス取得 */
74 #define FILE_IOCTL_ETHER_SETPHA         0x2202          /* 物理アドレス設定 */
75
76 /* IoControl機能コード(IP層) */
77 #define FILE_IOCTL_IP_GETIP                     0x2301          /* IPアドレス取得 */
78 #define FILE_IOCTL_IP_SETIP                     0x2302          /* IPアドレス設定 */
79 #define FILE_IOCTL_IP_GETMASK           0x2303          /* IPサブネットマスク取得 */
80 #define FILE_IOCTL_IP_SETMASK           0x2304          /* IPサブネットマスク設定 */
81
82 /* IoControl機能コード(ユーザー定義) */
83 #define FILE_IOCTL_USER                         0x6000          /* 0x6000〜0x7fff */
84
85
86 /* 型定義 */
87 typedef char                    FILE_ATTR;                              /* ファイル属性 */
88 typedef int                             FILE_ERR;                               /* ファイルのエラー型 */
89 typedef long                    FILE_POS;                               /* ファイル位置の型定義 */
90 typedef int                             FILE_SIZE;                              /* 読み書き時のサイズ用の型定義 */
91 typedef unsigned long   FILE_TIME;                              /* 読み書き時のサイズ用の時刻型定義 */
92
93
94 /* ボリューム情報 */
95 typedef struct t_file_volinf
96 {
97         char            szName[FILE_MAX_NAME];
98         HANDLE          hVolume;
99 } T_FILE_VOLINF;
100
101
102 /* ファイル情報 */
103 typedef struct t_file_fileinf
104 {
105         char            szFileName[FILE_MAX_NAME];
106         FILE_ATTR       Attribute;
107         FILE_POS        FileSize;
108
109 /*
110         FILE_TIME       timeCreate;
111         FILE_TIME       timeAceess;
112         FILE_TIME       timeWrite;
113 */
114 } T_FILE_FILEINF;
115
116
117 #include "fileobj.h"
118 #include "drvobj.h"
119
120
121 #ifdef __cplusplus
122 extern "C" {
123 #endif
124
125 /* システム */
126 void      File_Initialize(void);                                                                /* ファイルシステムの初期化 */
127
128 FILE_ERR  File_AddVolume(const T_FILE_VOLINF *pVolInf);                 /* ボリュームのマウント */
129 FILE_ERR  File_RemoveVolume(const T_FILE_VOLINF *pVolInf);              /* ボリュームのアンマウント */
130
131 FILE_ERR  File_AddDevice(const char *pszName, struct c_drvobj *pDrvObj);        /* デバイスドライバの登録 */
132 FILE_ERR  File_RemoveDevice(const char *pszName);                                                       /* デバイスドライバの削除 */
133
134
135 /* 基本API */
136 HANDLE    File_Open(const char *pszPatah, int iMode);
137 #define   File_Close(hFile)             Handle_Close(hFile)
138 FILE_ERR  File_IoControl(HANDLE hFile, int iFunc, void *pInBuf, FILE_SIZE InSize, const void *pOutBuf, FILE_SIZE OutSize);
139 FILE_POS  File_Seek(HANDLE hFile, FILE_POS Offset, int iOrign);
140 FILE_SIZE File_Read(HANDLE hFile, void *pBuf, FILE_SIZE Size);
141 FILE_SIZE File_Write(HANDLE hFile, const void *pData, FILE_SIZE Size);
142 FILE_ERR  File_Flush(HANDLE hFile);
143
144 /* 同期制御API */
145 FILE_ERR  File_SetWriteMode(HANDLE hFile, int iWriteMode);
146 FILE_ERR  File_GetWriteStatus(HANDLE hFile);
147 FILE_ERR  File_SetWriteMonitor(HANDLE hFile, HANDLE hEvent);
148 FILE_ERR  File_SetReadMode(HANDLE hFile, int iReadMode);
149 FILE_ERR  File_GetReadStatus(HANDLE hFile);
150 FILE_ERR  File_SetReadMonitor(HANDLE hFile, HANDLE hEvent);
151
152
153 /* 文字列用API */
154 int       File_GetChar(HANDLE hFile);
155 int       File_GetString(HANDLE hFile, char *pszString, int iSize);
156 int       File_PutChar(HANDLE hFile, int c);
157 int       File_PutString(HANDLE hFile, const char *pszString);
158
159 /* 書式付き文字列用API */
160 int       File_PrintFormatV(HANDLE hFile, const char *pszFormat, va_list argptr);
161 int       File_PrintFormat(HANDLE hFile, const char *pszFormat, ...);
162
163 int       File_PrintHexNibble(HANDLE hFile, unsigned char c);           /* 4bitの16進数を出力 */
164
165 int       File_PrintFormatDecimal(HANDLE hFile, long lNum, int iWidth, int iPadChar);           /* 書式付き10進数出力 */
166 int       File_PrintFormatVL(HANDLE hFile, const char *pszFormat, va_list argptr);              /* 書式付き出力軽量版 */
167
168
169 /* 拡張操作 */
170 FILE_POS  File_GetFileSize(HANDLE hFile);
171 FILE_SIZE File_GetReadSize(HANDLE hFile);
172 FILE_SIZE File_GetWriteSize(HANDLE hFile);
173 FILE_SIZE File_GetReadBuf(HANDLE hFile, void **ppBuf);
174 FILE_SIZE File_RelReadBuf(HANDLE hFile, void *pBuf, long lSize);
175 FILE_SIZE File_GetWriteBuf(HANDLE hFile, void **ppBuf);
176 FILE_SIZE File_SendWriteBuf(HANDLE hFile, void *pBuf, long lSize);
177 FILE_ERR  File_CanWriteBuf(HANDLE hFile, void *pBuf);
178
179 /* ディレクトリ操作 */
180 HANDLE    File_OpenDir(const char *pszName);                                            /* ディレクトリを開く */
181 FILE_ERR  File_FindNext(HANDLE hDir, T_FILE_FILEINF *pFileInf);         /* ディレクトリからファイルを検索 */
182 HANDLE    File_MakeDir(const char *pszName);                                            /* サブディレクトリを作成 */
183 HANDLE    File_Remove(const char *pszName);                                                     /* ファイルを削除 */
184
185
186 #ifdef __cplusplus
187 }
188 #endif
189
190
191 #endif  /* __HOS__file_h__ */
192
193
194 /* end of file */