如何使用文件函数

时间:2015-07-29 14:19:57

标签: c linux windows

我有一个从文件中读取数据的函数(即传递给文件*)。

我想要实现的是使用该函数从字符串中读取数据,即我想将字符串中的数据视为物理文件中的数据(例如使用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;
}

1 个答案:

答案 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中提供的其他字符串处理函数。