一、概述
ACL_VSTREAM 函数集不仅可以用在网络IO中,同时也可以用在文件IO中,而且读写所调用的函数接口一致,这样就给使用者带了方便。当然在UNIX类系统中,文件IO与网络IO的读写函数是一致的,因为UNIX比较好的将设备等都抽象为文件描述符,但如果您使用WINDOWS的API进行网络IO及文件IO编程时,不幸的是,微软提供了不同的调用方式,而且差别较大,这也可以看出似乎微软在统一规划上面比较“欠缺”,经常性地推出新的规范与标准,而新的总是不顾旧的,呵呵。
好了,现在具体地介绍一下如何使用 ACL_VSTREAM 进行跨平台式文件IO操作。ACL_VSTREAM 针对不同操作系统平台的API进行了封装,从而给使用者提供了统一的使用方式。
二、接口说明
1、文件打开与关闭
/** * 打开一个文件的数据流 * @param path {const char*} 文件名 * @param oflags {unsigned int} 标志位, We're assuming that O_RDONLY: 0x0000, * O_WRONLY: 0x0001, O_RDWR: 0x0002, O_APPEND: 0x0008, O_CREAT: 0x0100, * O_TRUNC: 0x0200, O_EXCL: 0x0400; just for win32, O_TEXT: 0x4000, * O_BINARY: 0x8000, O_RAW: O_BINARY, O_SEQUENTIAL: 0x0020, O_RANDOM: 0x0010. * @param mode {int} 打开文件句柄时的模式(如: 0600) * @param buflen {size_t} 内置缓冲区的大小 * @return ret {ACL_VSTREAM*}, ret== NULL: 出错, ret != NULL: OK */ ACL_API ACL_VSTREAM *acl_vstream_fopen(const char *path, unsigned int oflags, int mode, size_t buflen); /** * 释放一个数据流的内存空间并关闭其所携带的 socket 描述符 * @param stream {ACL_VSTREAM*} 数据流 */ ACL_API int acl_vstream_close(ACL_VSTREAM *stream); #define acl_vstream_fclose acl_vstream_close