我有一个从文件中读取数据的函数(即传递给文件*)。
我想要实现的是使用该函数从字符串中读取数据,即我想将字符串中的数据视为物理文件中的数据(例如使用fgets,fseek等) ,实际上是一个记忆文件。
我尝试通过setvbuf将数据字符串与/ dev / null(NUL)文件关联起来(类似于我在this stackoverflow question中读到的内容),但是我做错了或者不是这样做的。< / p>
有人可以帮助我在C中实现这一点,最好是以便携方式实现(实际上,我不介意使用特定于操作系统的函数/ ifdef,只要它有效并且它不太/太复杂)。
编辑:
#include <stdio.h>
#include <string.h>
#define NULL_L "/dev/null"
#define NULL_W "NUL"
FILE* open_memfile(char *pc_file_as_string) {
FILE *f = fopen(NULL_L, "rb");
int i_size = strlen(pc_file_as_string);
setvbuf(f, pc_file_as_string, _IOLBF, i_size);
return f;
}
int main()
{
char c_line[100] = "";
char pc_file_as_string[] = "line1 asdf\nline2 fsa afds\n\nline4";
FILE *f = open_memfile(pc_file_as_string);
int i = 4;
while (i > 0) {
fgets(c_line, 100, f);
if (c_line == NULL)
break;
else
puts(c_line);
i--;
}
fclose(f);
return 0;
}
答案 0 :(得分:3)
在Linux上,您将使用fmemopen。
在Windows上,没有可用的fmemopen功能。
您可以使用export http_proxy="http://cache.mycompany.com:3128"
export https_proxy="http://cache.mycompany.com:3128"
/ CreateFileMapping
函数创建并映射内存(分页)文件,但这将返回一个Windows文件句柄,该句柄无法用于您的目的。
使用MapViewOfFile
和stdio中提供的其他字符串处理函数。