acl/lib_acl/include/stdlib/acl_sys_patch.h

202 lines
5.9 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef ACL_SYS_PATCH_INCLUDE_H
#define ACL_SYS_PATCH_INCLUDE_H
# ifdef __cplusplus
extern "C" {
# endif
#include "acl_define.h"
#include "acl_vstream.h"
#ifdef WIN32
struct iovec {
void *iov_base; /**< Starting address */
size_t iov_len; /**< Number of bytes */
};
#ifdef HAVE_NO_TIMEVAL
struct timeval {
long tv_sec; /**< seconds */
long tv_usec; /**< microseconds */
};
#endif
struct timezone {
int tz_minuteswest; /**< minutes W of Greenwich */
int tz_dsttime; /**< type of dst correction */
};
/**
* 睡眠几秒
* @param sec {int} 睡眠的秒数
*/
ACL_API void sleep(int sec);
/**
* 获得当前时间
* @param tv {struct timeval*} 存储当前时间结果
* @param tz {struct timezone*} 时区
*/
ACL_API int gettimeofday(struct timeval *tv, struct timezone *tz);
#endif /* WIN32 */
#ifdef ACL_UNIX
# include <sys/uio.h>
#endif
/**
* 套接字初始化对于WIN32平台需要调用WSAStartup来初始化SOCKET
* 而对于UNIX平台需要通过 signal(SIGPIPE, SIG_IGN) 来忽略信号
* @return {int} 0: OK; -1: error
*/
ACL_API int acl_socket_init(void);
/**
* 程序退出前调用此函数释放全局套接字资源仅WIN32下有效
* @return {int} 0: OK; -1: error
*/
ACL_API int acl_socket_end(void);
/**
* 关闭套接字
* @param fd {ACL_SOCKET} 套接字
* @return {int} 0: OK; -1: error
*/
ACL_API int acl_socket_close(ACL_SOCKET fd);
/**
* 从套接字读数据
* @param fd {ACL_SOCKET} 网络套接字
* @param buf {void*} 内存缓冲区地址
* @param size {size_t} buf 缓冲区大小
* @param timeout {size_t} 读超时时间(秒)
* @param fp {ACL_VSTREAM*} 网络流, 可以为空
* @param arg {void*} 用户自已的参数,在回调方式时有用
* @return {int} 0: OK; -1: error
*/
ACL_API int acl_socket_read(ACL_SOCKET fd, void *buf, size_t size,
int timeout, ACL_VSTREAM *fp, void *arg);
/**
* 向套接字写数据
* @param fd {ACL_SOCKET} 网络套接字
* @param buf {void*} 数据地址
* @param size {size_t} buf 数据大小
* @param timeout {int} 写超时时间(秒)
* @param fp {ACL_VSTREAM*} 网络流, 可以为空
* @param arg {void*} 用户自已的参数,在回调方式时有用
* @return {int} 0: OK; -1: error
*/
ACL_API int acl_socket_write(ACL_SOCKET fd, const void *buf,
size_t size, int timeout, ACL_VSTREAM *fp, void *arg);
/**
* 向套接字写数据
* @param fd {ACL_SOCKET} 网络套接字
* @param vec {const struct iovec*} 数据数组地址
* @param count {int} vec 数组长度
* @param timeout {int} 写超时时间(秒)
* @param fp {ACL_VSTREAM*} 网络流, 可以为空
* @param arg {void*} 用户自已的参数,在回调方式时有用
* @return {int} 0: OK; -1: error
*/
ACL_API int acl_socket_writev(ACL_SOCKET fd, const struct iovec *vec,
int count, int timeout, ACL_VSTREAM *fp, void *arg);
/**
* 打开文件句柄
* @param filepath {cosnt char*} 文件路径
* @param flags {int} 打开标志位, O_RDONLY | O_WRONLY | O_RDWR,
* O_CREAT | O_EXCL | O_TRUNC, O_APPEND(for UNIX)
* @param mode {int} 打开权限位, 仅对UNIX有效, 如0700, 0755
* @return {ACL_FILE_HANDLE} 打开的文件句柄,返回 ACL_FILE_INVALID 表示打开失败
*/
ACL_API ACL_FILE_HANDLE acl_file_open(const char *filepath, int flags, int mode);
/**
* 关闭打开的文件句柄
* @param fh {ACL_FILE_HANDLE} 文件句柄
* @return {int} 0: ok; -1: error
*/
ACL_API int acl_file_close(ACL_FILE_HANDLE fh);
/**
* 定位文件位置
* @param fh {ACL_FILE_HANDLE} 文件句柄
* @param offset {acl_off_t} 偏移位置
* @param whence {int} 位置标志位SEEK_CUR, SEEK_SET, SEEK_END
* @return {acl_off_t} 当前的文件偏移位置
*/
ACL_API acl_off_t acl_lseek(ACL_FILE_HANDLE fh, acl_off_t offset, int whence);
/**
* 从文件中读数据
* @param fh {ACL_FILE_HANDLE} 文件句柄
* @param buf {void*} 存储缓冲区
* @param size {size_t} buf 缓冲区大小
* @param timeout {int} 读超时时间(秒)
* @param fp {ACL_VSTREAM*} 对应的文件流句柄, 可以为空
* @param arg {void*} 用户传递的参数, 以回调方式使用时此参数有效
* @return {int} 读到的实际数据, 如果返回 ACL_VSTREAM_EOF 表示读结束或出错
*/
ACL_API int acl_file_read(ACL_FILE_HANDLE fh, void *buf, size_t size,
int timeout, ACL_VSTREAM *fp, void *arg);
/**
* 向文件中写数据
* @param fh {ACL_FILE_HANDLE} 文件句柄
* @param buf {void*} 数据存储缓冲区
* @param size {size_t} buf 缓冲区中数据长度大小
* @param timeout {int} 写超时时间(秒)
* @param fp {ACL_VSTREAM*} 对应的文件流句柄, 可以为空
* @param arg {void*} 用户传递的参数, 以回调方式使用时此参数有效
* @return {int} 成功写的数据量, 如果返回 ACL_VSTREAM_EOF 表示写出错
*/
ACL_API int acl_file_write(ACL_FILE_HANDLE fh, const void *buf, size_t size,
int timeout, ACL_VSTREAM *fp, void *arg);
/**
* 向文件中写一组数据
* @param fh {ACL_FILE_HANDLE} 文件句柄
* @param vec {const struct iovec*} 数据存储数组
* @param count {int} vec 数组中元素个数
* @param timeout {int} 写超时时间(秒)
* @param fp {ACL_VSTREAM*} 对应的文件流句柄, 可以为空
* @param arg {void*} 用户传递的参数, 以回调方式使用时此参数有效
* @return {int} 成功写的数据量, 如果返回 ACL_VSTREAM_EOF 表示写出错
*/
ACL_API int acl_file_writev(ACL_FILE_HANDLE fh, const struct iovec *vec,
int count, int timeout, ACL_VSTREAM *fp, void *arg);
/**
* 将文件缓冲区中的数据全部写入硬盘
* @param fh {ACL_FILE_HANDLE} 文件句柄
* @param fp {ACL_VSTREAM*} 对应的文件流句柄, 可以为空
* @param arg {void*} 用户传递的参数, 以回调方式使用时此参数有效
* @return {int} 0: ok; -1: error
*/
ACL_API int acl_file_fflush(ACL_FILE_HANDLE fh, ACL_VSTREAM *fp, void *arg);
/**
* 根据文件名取得该文件的大小
* @param filename {const char*} 文件名
* @return {acl_int64} >= 0: ok; -1: error
*/
ACL_API acl_int64 acl_file_size(const char *filename);
/**
* 根据文件句柄取得该文件的大小
* @param fh {ACL_FILE_HANDLE} 文件句柄
* @param fp {ACL_VSTREAM*} 对应的文件流句柄, 可以为空
* @param arg {void*} 用户传递的参数, 以回调方式使用时此参数有效
* @return {acl_int64} >= 0: ok; -1: error
*/
ACL_API acl_int64 acl_file_fsize(ACL_FILE_HANDLE fh, ACL_VSTREAM *fp, void *arg);
# ifdef __cplusplus
}
# endif
#endif