acl  3.5.3.0
acl_file.h
浏览该文件的文档.
1 #ifndef ACL_FILE_INCLUDE_H
2 #define ACL_FILE_INCLUDE_H
3 
4 #include "acl_define.h"
5 #include "acl_vstream.h"
6 #include <stdarg.h>
7 
8 #ifdef __cplusplus
9 extern "C" {
10 #endif
11 
12 /**
13  * 文件流类型定义
14  */
15 typedef struct ACL_FILE {
16  ACL_VSTREAM *fp; /**< 流指针 */
17  unsigned int status; /**< 文件流状态 */
18 #define ACL_FILE_EOF (1 << 0)
19  int errnum; /**< 文件流的出错错误号 */
20 } ACL_FILE;
21 
22 #define ACL_FPATH(fp) ACL_VSTREAM_PATH((fp)->fp)
23 #define ACL_FSTREAM(fp) ((fp)->fp)
24 
25 /**
26  * 打开或创建一个文件进行读写操作
27  * @param filename {const char*} 文件名
28  * @param mode {const char*} 打开标志.
29  * r or rb: 只读方式打开已经存在文件
30  * w or wb: 只写方式打开已存在文件并清空或只写方式创建新文件
31  * a or ab: 尾部附加只写方式打开已存在文件或创建新文件
32  * r+ or rb+: 以读写方式打开已存在文件
33  * w+ or wb+: 以读写方式打开已存在文件并清空或创建新文件
34  * a+ or ab+: 以尾部附加读写方式打开已存在文件或创建新文件
35  */
36 ACL_API ACL_FILE *acl_fopen(const char *filename, const char *mode);
37 
38 /**
39  * 关闭一个文件流
40  * @param fp {ACL_FILE*} 文件流
41  */
42 ACL_API int acl_fclose(ACL_FILE *fp);
43 
44 /**
45  * 清除文件流的错误号
46  * @param fp {ACL_FILE*} 文件流
47  */
48 ACL_API void acl_clearerr(ACL_FILE *fp);
49 
50 /**
51  * 判断是否到达文件尾部
52  * @param fp {ACL_FILE*} 文件流
53  * @return {int} 0: 否; !0: 是
54  */
55 ACL_API int acl_feof(ACL_FILE *fp);
56 
57 /**
58  * 从文件流中读取一些固定长度的数据块
59  * @param buf {void*} 内存缓冲区地址
60  * @param size {size_t} 每个数据块长度
61  * @param nitems {size_t} 数据块个数
62  * @param fp {ACL_FILE*} 文件流
63  * @return {size_t} 数据块个数, 若出错则返回 EOF
64  */
65 ACL_API size_t acl_fread(void *buf, size_t size, size_t nitems, ACL_FILE *fp);
66 
67 /**
68  * 从文件流中读取一行数据
69  * @param buf {char*} 缓冲区地址
70  * @param size {int} buf 空间大小
71  * @param fp {ACL_FILE*} 文件流
72  * @return {char*} NULL: 未读到完整行数据; !NULL: 读到完整行数据
73  */
74 ACL_API char *acl_fgets(char *buf, int size, ACL_FILE *fp);
75 
76 /**
77  * 从文件流中读取一行数据,但返回的数据尾部不包含 "\r\n"
78  * @param buf {char*} 缓冲区地址
79  * @param size {int} buf 空间大小
80  * @param fp {ACL_FILE*} 文件流
81  * @return {char*} NULL: 未读到完整行数据; !NULL: 读到完整行数据
82  */
83 ACL_API char *acl_fgets_nonl(char *buf, int size, ACL_FILE *fp);
84 
85 /**
86  * 从文件流中读取一个字符
87  * @param fp {ACL_FILE*} 文件流
88  * @return {int} EOF: 到达文件尾或出错; !EOF: 正确读到一个字符的 ASCII 码
89  */
90 ACL_API int acl_fgetc(ACL_FILE *fp);
91 #define acl_getc acl_fgetc
92 
93 /**
94  * 从标准输入中读取一行数据
95  * @param buf {char*} 缓存区地址
96  * @param size {int} buf 空间大小
97  * @return {char*} NULL: 读结束或出错; !NULL: 应与 buf 相同地址
98  */
99 ACL_API char *acl_gets(char *buf, size_t size);
100 
101 /**
102  * 从标准输入中读取一行数据, 但数据尾部不包含 "\r\n"
103  * @param buf {char*} 缓存区地址
104  * @param size {int} buf 空间大小
105  * @return {char*} NULL: 读结束或出错; !NULL: 应与 buf 相同地址
106  */
107 ACL_API char *acl_gets_nonl(char *buf, size_t size);
108 
109 /**
110  * 从标准输入中读取一个字符
111  * @return {int} EOF: 到达文件尾或出错; !EOF: 正确读到一个字符的 ASCII 码
112  */
113 ACL_API int acl_getchar(void);
114 
115 /**
116  * 向文件流中写入变参格式数据
117  * @param fp {ACL_FILE*} 文件流句柄
118  * @param fmt {const char*} 变参格式
119  * @param ... 变参
120  * @return {size_t} 数据长度, 若出错则返回 EOF
121  */
122 ACL_API int ACL_PRINTF(2, 3) acl_fprintf(ACL_FILE *fp, const char *fmt, ...);
123 
124 /**
125  * 向文件流中写入变参格式数据
126  * @param fp {ACL_FILE*} 文件流句柄
127  * @param fmt {const char*} 变参格式
128  * @param ap {va_list} 变参列表
129  * @return {size_t} 数据长度, 若出错则返回 EOF
130  */
131 ACL_API int acl_vfprintf(ACL_FILE *fp, const char *fmt, va_list ap);
132 
133 /**
134  * 向文件流中写入一些固定长度的数据块
135  * @param ptr {const void*} 数据地址
136  * @param size {size_t} 每个数据块长度
137  * @param nitems {size_t} 数据块个数
138  * @param fp {ACL_FILE*} 文件流指针
139  * @return {size_t} 数据块个数, 若出错则返回 EOF
140  */
141 ACL_API size_t acl_fwrite(const void *ptr, size_t size, size_t nitems, ACL_FILE *fp);
142 
143 /**
144  * 向文件流中写入数据并自动在尾部添加 "\r\n"
145  * @param s {const char*} 字符串地址
146  * @param fp {ACL_FILE*} 文件流指针
147  * @return {int} 写入的数据量(包含 "\r\n"), 若出错则返回 EOF
148  */
149 ACL_API int acl_fputs(const char *s, ACL_FILE *fp);
150 
151 /**
152  * 向标准输出流中写入变参格式数据
153  * @param fmt {const char*} 变参格式
154  * @param ... 变参
155  * @return {size_t} 数据长度, 若出错则返回 EOF
156  */
157 ACL_API int ACL_PRINTF(1, 2) acl_printf(const char *fmt, ...);
158 
159 /**
160  * 向标准输出流中写入变参格式数据
161  * @param fmt {const char*} 变参格式
162  * @param ap {va_list} 变参列表
163  * @return {size_t} 数据长度, 若出错则返回 EOF
164  */
165 ACL_API int acl_vprintf(const char *fmt, va_list ap);
166 
167 /**
168  * 向文件流中写入一个字节
169  * @param c {int} 一个符的 ASCII 码
170  * @param fp {ACL_FILE*} 文件流指针
171  * @return {int} 写入的数据量, 若出错则返回 EOF
172  */
173 ACL_API int acl_putc(int c, ACL_FILE *fp);
174 #define acl_fputc acl_putc
175 
176 /**
177  * 向标准输出中写入数据并自动在尾部添加 "\r\n"
178  * @param s {const char*} 字符串地址
179  * @return {int} 写入的数据量(包含 "\r\n"), 若出错则返回 EOF
180  */
181 ACL_API int acl_puts(const char *s);
182 
183 /**
184  * 向文件流中写入一个字节
185  * @param c {int} 一个符的 ASCII 码
186  * @return {int} 写入的数据量, 若出错则返回 EOF
187  */
188 ACL_API int acl_putchar(int c);
189 
190 /**
191  * 定位文件位置
192  * @param fp {ACL_FILE*} 文件流
193  * @param offset {acl_off_t} 偏移位置
194  * @param whence {int} 偏移方向, SEEK_SET, SEEK_CUR, SEEK_END
195  * @return ret {acl_off_t}, ret >= 0: 正确, ret < 0: 出错
196  */
197 ACL_API acl_off_t acl_fseek(ACL_FILE *fp, acl_off_t offset, int whence);
198 
199 /**
200  * 获得当前文件指针在文件中的位置
201  * @param fp {ACL_FILE*} 文件句柄
202  * @return {acl_off_t} 返回值 -1 表示出错
203  */
204 ACL_API acl_off_t acl_ftell(ACL_FILE *fp);
205 
206 #ifdef __cplusplus
207 }
208 #endif
209 
210 #endif
struct ACL_FILE ACL_FILE
ACL_API int acl_fgetc(ACL_FILE *fp)
ACL_API int acl_fclose(ACL_FILE *fp)
ACL_API int ACL_API int acl_vprintf(const char *fmt, va_list ap)
ACL_API char * acl_fgets(char *buf, int size, ACL_FILE *fp)
int errnum
Definition: acl_file.h:19
ACL_API int ACL_PRINTF(2, 3) acl_fprintf(ACL_FILE *fp
ACL_API int acl_putchar(int c)
ACL_API int acl_puts(const char *s)
ACL_API char * acl_gets(char *buf, size_t size)
ACL_API size_t acl_fread(void *buf, size_t size, size_t nitems, ACL_FILE *fp)
ACL_VSTREAM * fp
Definition: acl_file.h:16
ACL_API int acl_getchar(void)
ACL_API void acl_clearerr(ACL_FILE *fp)
ACL_API size_t acl_fwrite(const void *ptr, size_t size, size_t nitems, ACL_FILE *fp)
ACL_API acl_off_t acl_ftell(ACL_FILE *fp)
ACL_API int acl_fputs(const char *s, ACL_FILE *fp)
ACL_API char * acl_gets_nonl(char *buf, size_t size)
ACL_API int const char * fmt
Definition: acl_file.h:122
ACL_API ACL_FILE * acl_fopen(const char *filename, const char *mode)
ACL_API int const char ACL_API int acl_vfprintf(ACL_FILE *fp, const char *fmt, va_list ap)
ACL_API int acl_feof(ACL_FILE *fp)
unsigned int status
Definition: acl_file.h:17
ACL_API int acl_putc(int c, ACL_FILE *fp)
acl_int64 acl_off_t
Definition: acl_define.h:12
ACL_API char * acl_fgets_nonl(char *buf, int size, ACL_FILE *fp)
ACL_API acl_off_t acl_fseek(ACL_FILE *fp, acl_off_t offset, int whence)