最初从 ingenuitas python-tesseract 转移过来。由 Jeff Verkoeyen 基于 Apache 2.0 许可证进行移植。
来自 fmemopen 手册页
FILE *fmemopen(void *buf, size_t size, const char *mode);
fmemopen() 函数打开一个流,允许通过模式指定的访问。该流允许在由 buf 指向的字符串或内存缓冲区上执行 I/O 操作。此缓冲区必须至少 size 字节长。
遗憾的是,这种方法在 BSD 操作系统(具体为 Mac OS X 和 iOS)上不存在。可以使用特定的 BSD 方法 funopen
重新创建此功能。
来自 funopen 手册页
FILE * funopen(const void cookie, int (readfn)(void , char *, int), int (writefn)(void , const char *, int), fpos_t (seekfn)(void , fpos_t, int), int (closefn)(void *));
funopen() 函数将一个流与多达四个“I/O 函数”关联起来。必须指定 readfn 或 writefn;其他可以用空指针传递适当类型的值。这些 I/O 函数将用于读取、写入、定位和关闭新的流。
fmemopen.c 提供了使用 funopen 的简单 fmemopen 实现,以便您可以为内存块创建 FILE 指针。
将 fmemopen.h 和 fmemopen.c 拖入您的项目中,并将它们添加到目标中。《#include "fmemopen.h HX, 在您需要使用《fmemopen》的地方。
#import "fmemopen.h"
NSString* string = @"fmemopen in Objective-C";
const char* cstr = [string UTF8String];
FILE* file = fmemopen((void *)cstr, sizeof(char) * (string.length + 1), "r");
// fread on file will now read the contents of the NSString
fclose(file);