acl  3.5.3.0
acl_sys_patch.h
浏览该文件的文档.
1 #ifndef ACL_SYS_PATCH_INCLUDE_H
2 #define ACL_SYS_PATCH_INCLUDE_H
3 
4 # ifdef __cplusplus
5 extern "C" {
6 # endif
7 
8 #include "acl_define.h"
9 #include "acl_vstream.h"
10 
11 #if defined(_WIN32) || defined(_WIN64)
12 struct iovec {
13  void *iov_base; /**< Starting address */
14  size_t iov_len; /**< Number of bytes */
15 };
16 
17 #ifdef HAVE_NO_TIMEVAL
18 struct timeval {
19  long tv_sec; /**< seconds */
20  long tv_usec; /**< microseconds */
21 };
22 #endif
23 
24 struct timezone {
25  int tz_minuteswest; /**< minutes W of Greenwich */
26  int tz_dsttime; /**< type of dst correction */
27 };
28 
29 /**
30  * 睡眠几秒
31  * @param sec {int} 睡眠的秒数
32  */
33 ACL_API void sleep(int sec);
34 
35 /**
36  * 获得当前时间
37  * @param tv {struct timeval*} 存储当前时间结果
38  * @param tz {struct timezone*} 时区
39  */
40 ACL_API int gettimeofday(struct timeval *tv, struct timezone *tz);
41 ACL_API int gettimeofday1(struct timeval *tv, struct timezone *tz);
42 ACL_API int gettimeofday2(struct timeval *tv, struct timezone *tz);
43 ACL_API int gettimeofday3(struct timeval *tv, struct timezone *tz);
44 ACL_API int gettimeofday4(struct timeval *tv, struct timezone *tz);
45 
46 #endif /* _WIN32 */
47 #ifdef ACL_UNIX
48 # include <sys/uio.h>
49 #endif
50 
51 /**
52  * 套接字初始化,对于_WIN32平台:需要调用WSAStartup来初始化SOCKET,
53  * 而对于UNIX平台:需要通过 signal(SIGPIPE, SIG_IGN) 来忽略信号
54  * @return {int} 0: OK; -1: error
55  */
56 ACL_API int acl_socket_init(void);
57 
58 /**
59  * 程序退出前调用此函数释放全局套接字资源(仅_WIN32下有效)
60  * @return {int} 0: OK; -1: error
61  */
62 ACL_API int acl_socket_end(void);
63 
64 /**
65  * 关闭套接字
66  * @param fd {ACL_SOCKET} 套接字
67  * @return {int} 0: OK; -1: error
68  */
69 ACL_API int acl_socket_close(ACL_SOCKET fd);
70 
71 /**
72  * 禁止套接口的发送与接收
73  * @param fd {ACL_SOCKET} 套接字
74  * @param how {int}
75  * @return {int} 返回 0 表示操作成功,否则表示出错
76  */
77 #if defined(_WIN32) || defined(_WIN64)
78 # ifndef SHUT_RD
79 # define SHUT_RD SD_RECEIVE
80 # endif
81 # ifndef SHUT_WR
82 # define SHUT_WR SD_SEND
83 # endif
84 # ifndef SHUT_RDWR
85 # define SHUT_RDWR SD_BOTH
86 # endif
87 #endif
88 ACL_API int acl_socket_shutdown(ACL_SOCKET fd, int how);
89 
90 /**
91  * 从套接字读数据
92  * @param fd {ACL_SOCKET} 网络套接字
93  * @param buf {void*} 内存缓冲区地址
94  * @param size {size_t} buf 缓冲区大小
95  * @param timeout {size_t} 读超时时间(秒)
96  * @param fp {ACL_VSTREAM*} 网络流, 可以为空
97  * @param arg {void*} 用户自已的参数,在回调方式时有用
98  * @return {int} 0: OK; -1: error
99  */
100 ACL_API int acl_socket_read(ACL_SOCKET fd, void *buf, size_t size,
101  int timeout, ACL_VSTREAM *fp, void *arg);
102 
103 /**
104  * 向套接字写数据
105  * @param fd {ACL_SOCKET} 网络套接字
106  * @param buf {void*} 数据地址
107  * @param size {size_t} buf 数据大小
108  * @param timeout {int} 写超时时间(秒)
109  * @param fp {ACL_VSTREAM*} 网络流, 可以为空
110  * @param arg {void*} 用户自已的参数,在回调方式时有用
111  * @return {int} 0: OK; -1: error
112  */
113 ACL_API int acl_socket_write(ACL_SOCKET fd, const void *buf,
114  size_t size, int timeout, ACL_VSTREAM *fp, void *arg);
115 
116 /**
117  * 向套接字写数据
118  * @param fd {ACL_SOCKET} 网络套接字
119  * @param vec {const struct iovec*} 数据数组地址
120  * @param count {int} vec 数组长度
121  * @param timeout {int} 写超时时间(秒)
122  * @param fp {ACL_VSTREAM*} 网络流, 可以为空
123  * @param arg {void*} 用户自已的参数,在回调方式时有用
124  * @return {int} 0: OK; -1: error
125  */
126 ACL_API int acl_socket_writev(ACL_SOCKET fd, const struct iovec *vec,
127  int count, int timeout, ACL_VSTREAM *fp, void *arg);
128 
129 /**
130  * 判断套接字是否正常
131  * @param fd {ACL_SOCKET}
132  * @return {int} 返回值 1 表示正常,返回 0 表示异常
133  */
134 ACL_API int acl_socket_alive(ACL_SOCKET fd);
135 
136 /**
137  * 打开文件句柄
138  * @param filepath {cosnt char*} 文件路径
139  * @param flags {int} 打开标志位, O_RDONLY | O_WRONLY | O_RDWR,
140  * O_CREAT | O_EXCL | O_TRUNC, O_APPEND(for UNIX)
141  * @param mode {int} 打开权限位, 仅对UNIX有效, 如:0700, 0755
142  * @return {ACL_FILE_HANDLE} 打开的文件句柄,返回 ACL_FILE_INVALID 表示打开失败
143  */
144 ACL_API ACL_FILE_HANDLE acl_file_open(const char *filepath, int flags, int mode);
145 
146 /**
147  * 关闭打开的文件句柄
148  * @param fh {ACL_FILE_HANDLE} 文件句柄
149  * @return {int} 0: ok; -1: error
150  */
151 ACL_API int acl_file_close(ACL_FILE_HANDLE fh);
152 
153 /**
154  * 定位文件位置
155  * @param fh {ACL_FILE_HANDLE} 文件句柄
156  * @param offset {acl_off_t} 偏移位置
157  * @param whence {int} 位置标志位:SEEK_CUR, SEEK_SET, SEEK_END
158  * @return {acl_off_t} 当前的文件偏移位置
159  */
160 ACL_API acl_off_t acl_lseek(ACL_FILE_HANDLE fh, acl_off_t offset, int whence);
161 
162 /**
163  * 从文件中读数据
164  * @param fh {ACL_FILE_HANDLE} 文件句柄
165  * @param buf {void*} 存储缓冲区
166  * @param size {size_t} buf 缓冲区大小
167  * @param timeout {int} 读超时时间(秒)
168  * @param fp {ACL_VSTREAM*} 对应的文件流句柄, 可以为空
169  * @param arg {void*} 用户传递的参数, 以回调方式使用时此参数有效
170  * @return {int} 读到的实际数据, 如果返回 ACL_VSTREAM_EOF 表示读结束或出错
171  */
172 ACL_API int acl_file_read(ACL_FILE_HANDLE fh, void *buf, size_t size,
173  int timeout, ACL_VSTREAM *fp, void *arg);
174 
175 /**
176  * 向文件中写数据
177  * @param fh {ACL_FILE_HANDLE} 文件句柄
178  * @param buf {void*} 数据存储缓冲区
179  * @param size {size_t} buf 缓冲区中数据长度大小
180  * @param timeout {int} 写超时时间(秒)
181  * @param fp {ACL_VSTREAM*} 对应的文件流句柄, 可以为空
182  * @param arg {void*} 用户传递的参数, 以回调方式使用时此参数有效
183  * @return {int} 成功写的数据量, 如果返回 ACL_VSTREAM_EOF 表示写出错
184  */
185 ACL_API int acl_file_write(ACL_FILE_HANDLE fh, const void *buf, size_t size,
186  int timeout, ACL_VSTREAM *fp, void *arg);
187 
188 /**
189  * 向文件中写一组数据
190  * @param fh {ACL_FILE_HANDLE} 文件句柄
191  * @param vec {const struct iovec*} 数据存储数组
192  * @param count {int} vec 数组中元素个数
193  * @param timeout {int} 写超时时间(秒)
194  * @param fp {ACL_VSTREAM*} 对应的文件流句柄, 可以为空
195  * @param arg {void*} 用户传递的参数, 以回调方式使用时此参数有效
196  * @return {int} 成功写的数据量, 如果返回 ACL_VSTREAM_EOF 表示写出错
197  */
198 ACL_API int acl_file_writev(ACL_FILE_HANDLE fh, const struct iovec *vec,
199  int count, int timeout, ACL_VSTREAM *fp, void *arg);
200 
201 /**
202  * 将文件缓冲区中的数据全部写入硬盘
203  * @param fh {ACL_FILE_HANDLE} 文件句柄
204  * @param fp {ACL_VSTREAM*} 对应的文件流句柄, 可以为空
205  * @param arg {void*} 用户传递的参数, 以回调方式使用时此参数有效
206  * @return {int} 0: ok; -1: error
207  */
208 ACL_API int acl_file_fflush(ACL_FILE_HANDLE fh, ACL_VSTREAM *fp, void *arg);
209 
210 /**
211  * 根据文件名取得该文件的大小
212  * @param filename {const char*} 文件名
213  * @return {acl_int64} >= 0: ok; -1: error
214  */
215 ACL_API acl_int64 acl_file_size(const char *filename);
216 
217 /**
218  * 根据文件句柄取得该文件的大小
219  * @param fh {ACL_FILE_HANDLE} 文件句柄
220  * @param fp {ACL_VSTREAM*} 对应的文件流句柄, 可以为空
221  * @param arg {void*} 用户传递的参数, 以回调方式使用时此参数有效
222  * @return {acl_int64} >= 0: ok; -1: error
223  */
224 ACL_API acl_int64 acl_file_fsize(ACL_FILE_HANDLE fh, ACL_VSTREAM *fp, void *arg);
225 
226 /**
227  * 创建 SOCKET 对
228  * @param domain {int}
229  * @param type {int}
230  * @param protocol {int}
231  * @param result {ACL_SOCKET [2]} 存储结果
232  * @return {int} 成功返回 0,失败返回 -1
233  */
234 ACL_API int acl_sane_socketpair(int domain, int type, int protocol,
235  ACL_SOCKET result[2]);
236 
237 /* in acl_sys_socket.c */
238 
239 #if defined(_WIN32) || defined(_WIN64)
240 typedef int (WINAPI *acl_close_socket_fn)(ACL_SOCKET);
241 typedef int (WINAPI *acl_recv_fn)(ACL_SOCKET, char *, int, int);
242 typedef int (WINAPI *acl_send_fn)(ACL_SOCKET, const char *, int, int);
243 #else
244 typedef int (*acl_close_socket_fn)(ACL_SOCKET);
245 typedef ssize_t (*acl_read_fn)(ACL_SOCKET, void *, size_t);
246 typedef ssize_t (*acl_recv_fn)(ACL_SOCKET, void *, size_t, int);
247 typedef ssize_t (*acl_write_fn)(ACL_SOCKET, const void *, size_t);
248 typedef ssize_t (*acl_writev_fn)(ACL_SOCKET, const struct iovec *, int);
249 typedef ssize_t (*acl_send_fn)(ACL_SOCKET, const void *, size_t, int);
250 #endif
251 
252 #if !defined(_WIN32) && !defined(_WIN64)
253 ACL_API void acl_set_read(acl_read_fn fn);
254 ACL_API void acl_set_write(acl_write_fn fn);
255 ACL_API void acl_set_writev(acl_writev_fn fn);
256 #endif
257 
259 ACL_API void acl_set_recv(acl_recv_fn fn);
260 ACL_API void acl_set_send(acl_send_fn fn);
261 
262 # ifdef __cplusplus
263 }
264 # endif
265 
266 #endif
267 
ACL_API void acl_set_recv(acl_recv_fn fn)
ACL_API acl_int64 acl_file_size(const char *filename)
ACL_API int acl_file_fflush(ACL_FILE_HANDLE fh, ACL_VSTREAM *fp, void *arg)
ssize_t(* acl_send_fn)(ACL_SOCKET, const void *, size_t, int)
int(* acl_close_socket_fn)(ACL_SOCKET)
ACL_API int acl_file_writev(ACL_FILE_HANDLE fh, const struct iovec *vec, int count, int timeout, ACL_VSTREAM *fp, void *arg)
ACL_API int acl_sane_socketpair(int domain, int type, int protocol, ACL_SOCKET result[2])
ACL_API acl_off_t acl_lseek(ACL_FILE_HANDLE fh, acl_off_t offset, int whence)
ACL_API int acl_socket_read(ACL_SOCKET fd, void *buf, size_t size, int timeout, ACL_VSTREAM *fp, void *arg)
ACL_API acl_int64 acl_file_fsize(ACL_FILE_HANDLE fh, ACL_VSTREAM *fp, void *arg)
ssize_t(* acl_writev_fn)(ACL_SOCKET, const struct iovec *, int)
ACL_API ACL_FILE_HANDLE acl_file_open(const char *filepath, int flags, int mode)
ACL_API int acl_file_close(ACL_FILE_HANDLE fh)
ACL_API void acl_set_read(acl_read_fn fn)
ACL_API void acl_set_close_socket(acl_close_socket_fn fn)
ACL_API int acl_socket_end(void)
ACL_API int acl_socket_writev(ACL_SOCKET fd, const struct iovec *vec, int count, int timeout, ACL_VSTREAM *fp, void *arg)
ssize_t(* acl_recv_fn)(ACL_SOCKET, void *, size_t, int)
ssize_t(* acl_read_fn)(ACL_SOCKET, void *, size_t)
ACL_API int acl_file_read(ACL_FILE_HANDLE fh, void *buf, size_t size, int timeout, ACL_VSTREAM *fp, void *arg)
ACL_API int acl_socket_init(void)
ACL_API int acl_socket_shutdown(ACL_SOCKET fd, int how)
ACL_API void acl_set_send(acl_send_fn fn)
ssize_t(* acl_write_fn)(ACL_SOCKET, const void *, size_t)
ACL_API int acl_socket_close(ACL_SOCKET fd)
ACL_API int acl_socket_write(ACL_SOCKET fd, const void *buf, size_t size, int timeout, ACL_VSTREAM *fp, void *arg)
ACL_API void acl_set_writev(acl_writev_fn fn)
acl_int64 acl_off_t
Definition: acl_define.h:12
ACL_API int acl_socket_alive(ACL_SOCKET fd)
ACL_API int acl_file_write(ACL_FILE_HANDLE fh, const void *buf, size_t size, int timeout, ACL_VSTREAM *fp, void *arg)
ACL_API void acl_set_write(acl_write_fn fn)