# IOplus **Repository Path**: solym/IOplus ## Basic Information - **Project Name**: IOplus - **Description**: 一个简单的IO转调库。 目前很多软件编写的时候,其文件操作部分都是基于C标准库或者系统API函数来实现的。这个库的目的就是扩展这些函数的具体实现,以便于添加更多的功能。例如使得fopen支持http协议,打开网络文件等。 - **Primary Language**: C - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2016-04-07 - **Last Updated**: 2021-01-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #IOplus IO扩展库 一个简单的IO转调库。 目前很多软件编写的时候,其文件操作部分都是基于C标准库或者系统API函数来实现的。 这个库的目的就是扩展这些函数的具体实现,以便于添加更多的功能。例如使得fopen支持http协议,打开网络文件等。 ## linux 下使用说明 在linux下,目前实现了以下函数的转调操作。 ```C #include /* 成功返回文件描述符, 失败返回-1 */ int open(const char *pathname, int oflag, ... /* mode_t mode */); #include /* 成功返回0, 失败返回-1 */ int close(int filedes); /* 成功返回新的文件偏移量,出错返回-1 */ off_t lseek(int filedes, off_t offset, int whence); /* 成功则返回读取到的字节数,若已到文件的结尾返回0,出错返回-1 */ ssize_t read(int filedes, void *buf, size_t nbytes); /* 成功则返回写入的字节数,出错返回-1 */ ssize_t write(int filedes, const void *buf, size_t nbytes); /* 成功则返回新的文件描述符,出错返回-1 */ int dup(int filedes); int dup2(int fileds, int filedes2); /* 成功返回0,失败返回-1 */ int fsync(int filedes); /* 刷filedes指代的文件的缓存到磁盘 */ int fdatasync(int filedes); /* 与fsync类似,但只刷数据,不刷属性 */ void sync(void); /* 刷所有脏的缓存 */ ``` 在`example`目录下有一个`iop_custom.c`的文件,里面实现了一些`iop_xxx`的函数。在这里你可以修改其中的实现来达到自己的目的。 如果你在这里需要调用原本的IO函数,请使用`iop_real_xxx`的调用。其中`xxx`指`open``close`...等。在调用这些原本的IO函数前,请调用一次`iop_init`函数。 `iop_init`函数返回`NULL`表示成功,否则表示出错。错误信息在返回的`const char*`指针指向的字符串中。 暂时没有实现`create`函数,因为其可以使用`open`函数来替代。 ### 编译链接说明 你可以把所有源代码包含在你的工程中一起编译,或者使用`libs`目录下的`SConstruct`文件来编译出静态库。如果你这样做,请在生成你的项目的时候,链接上`dl`库。 如果你想使用动态库,那么使用`libs`目录下编译出来的`libioplus.so`文件即可。 (备注:`SConstruct`文件是`scons`工具使用的配置文件,相当于`make`工具使用的`Makefile`文件) ## windows 下使用说明 windows下暂时还未实现。